ホームページ ウェブフロントエンド jsチュートリアル KnockoutJs での制御フロー バインディングの仕組み

KnockoutJs での制御フロー バインディングの仕組み

Nov 24, 2024 am 09:23 AM

Como funcionam Bindings de Fluxo de Controle no KnockoutJs

このコンテンツは基本的にオリジナル資料の翻訳です。目的は、Magento 2 の KnockoutJs について学び、KnockoutJs に関するポルトガル語のコンテンツを作成することです。

ドキュメント

  • データバインド構文
  • バインディングコンテキスト
  • 「foreach」バインディング
  • 「if」と「ifnot」のバインディング
  • 「with」バインディングと「using」バインディング
  • 「let」バインディング

バインディング

KnockoutJs では、バインディング は、ViewModel のロジック (データおよびビジネス ロジック) を View (HTML) に接続する方法です。つまり、バインディングを通じて、DOM を直接操作することなく、ユーザー インターフェイスがデータの変更を自動的に反映します。

KnockoutJ のバインディングは、HTML 要素の data-bind 属性を通じて機能します。この属性では、使用するバインディングと関連する値を指定します。

制御フロー

フォーリーチ

binding foreach は、HTML 要素内で繰り返しを作成し、コレクション内の各項目に対して同じ要素のコピーを生成するために使用されます (配列観察可能な配列など) ) をビューモデルに追加します。これにより、モデルのデータを表示するリストやピボット テーブルを簡単に作成できます。

モデル 配列 の内容が (エントリの追加、移動、または削除によって) 変更されると、foreachbinding は効率的なアルゴリズムを使用して、何が変更されたかを確認できるため、配列に従って DOM を更新できます。これは、シミュレートされた変更の任意の組み合わせを処理できることを意味します。

  • 配列に何かが追加されると、foreach はモデルの新しいコピーをレンダリングし、既存の DOM に挿入します。
  • 配列内の何かが削除されると、foreach は対応する DOM 要素を単純に削除します。
  • 配列内の何かを並べ替える場合 (同じオブジェクト インスタンスを維持する場合)、foreach は通常、対応する DOM 要素を新しい位置に移動するだけです。
<div>
  <ul data-bind="foreach: items">
    <li data-bind="text: $data"></li>
  </ul>

  <ul data-bind="foreach: getItems()">
    <li>
        <span data-bind="text: name"></span> - <span data-bind="text: age"></span>
    </li>
  </ul>

  <ul data-bind="foreach: { data: people, as: 'person' }"></ul>
</div>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

この場合、変数 $data はループ内で処理されている現在の項目を参照します。これにより、ループ内でその項目のプロパティまたは値にアクセスできるようになります。

as ディレクティブを使用すると、foreach 反復サイクル内の現在の項目を表す変数のカスタム名を定義できます。これにより、コードがより読みやすく、意味のあるものになります。

配列内の項目を削除するのではなく、実際にその存在を見失うことなく非表示にすることが必要な場合があります。これは非破壊的な削除として知られています。破棄されたエントリを非表示にする必要がある場合は、includeDestroyed オプションを false に設定します。

<div>
  <ul data-bind="foreach: items">
    <li data-bind="text: $data"></li>
  </ul>

  <ul data-bind="foreach: getItems()">
    <li>
        <span data-bind="text: name"></span> - <span data-bind="text: age"></span>
    </li>
  </ul>

  <ul data-bind="foreach: { data: people, as: 'person' }"></ul>
</div>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

生成された DOM 要素に対して追加のカスタム ロジックを実行する必要がある場合は、次のコールバックのいずれかを使用できます。

  • afterRender: foreach ブロックが複製されてドキュメントに挿入されるたびに、foreach が初めて初期化されるときと、後で新しいエントリが関連する array;
  • に追加されるときの両方で呼び出されます。
  • afterAdd: は、新しいエントリが 配列 に追加されるときのみ呼び出されることを除いて、afterRender と似ています (foreach が 配列 の初期内容を最初に反復するときは呼び出されません);
  • beforeRemove: array から項目が削除されるとき、対応する DOM ノードが削除される前に呼び出されます。 beforeRemove コールバックが指定されている場合、DOM ノードを手動で削除する必要があります。つまり、KnockoutJs は、DOM ノードの物理的な削除がいつ許可されるかを知ることができません。
  • beforeMove: array の項目が array 内で位置を変更したとき、対応する DOM ノードが移動される前に呼び出されます。 beforeMove はインデックスが変更されたすべての配列要素に適用されるため、array の先頭に新しい項目が挿入されると、コールバック (指定されている場合) がインデックスとして他のすべての要素に対してトリガーされることに注意してください。順位が一つ上がった。 beforeMove を使用して影響を受ける要素の元の画面座標を保存すると、afterMove コールバックで要素の動きをアニメーション化できます。
  • afterMove: 配列 の項目が 配列 内で位置を変更した後、および foreach が一致するように DOM を更新した後に呼び出されます。 afterMove は、インデックスが変更された 配列 のすべての要素に適用されるため、配列 の先頭に新しい項目が挿入されると、コールバック (指定されている場合) がトリガーされることに注意してください。他のすべての要素については、インデックス位置が 1 つ増加しているためです。

もしそうでない場合

if の binding により、指定された式が true (または、 null 以外のオブジェクトまたは空ではない 文字列).

ifnot の バインディング は、渡された式の結果を反転することを除いて、if バインディングとまったく同じように機能します。

if と ifnot は、可視バインディングと非表示バインディングと同様の役割を果たします。違いは、visible の場合、含まれるマークアップは常に DOM 内に残り、そのデータ バインドが常に適用されることです。visible バインディングは CSS を使用して、含まれる要素の表示/非表示を切り替えるだけです。ただし、if リンクは、DOM に含まれるマークアップを物理的に追加または削除し、式が true の場合にのみ子孫にリンクを適用します。式に監視可能な値が含まれる場合、その値が変更されるたびに式は再評価されます。

<div>
  <ul data-bind="foreach: items">
    <li data-bind="text: $data"></li>
  </ul>

  <ul data-bind="foreach: getItems()">
    <li>
        <span data-bind="text: name"></span> - <span data-bind="text: age"></span>
    </li>
  </ul>

  <ul data-bind="foreach: { data: people, as: 'person' }"></ul>
</div>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

使って

with と using の bindings は、新しいバインディング コンテキストを作成し、子孫要素が指定されたオブジェクトのコンテキストにバインドされるようにします。

binding は、関連付けられた値が falsy であるかどうかに応じて、子孫要素を動的に追加または削除します。

このオプションを使用すると、新しいコンテキスト オブジェクトの エイリアス を定義できます。 $data.
コンテキスト変数を使用してオブジェクトを参照することは可能ですが、

<div data-bind='foreach: { data: myArray, includeDestroyed: false }'>
    ...
</div>
ログイン後にコピー

using バインディングは、子孫要素のレンダリングが望ましくない場合の with の代わりとして KnockoutJs 3.5 で導入されました。 using では再レンダリングではなく子孫接続が再評価されるため、各子孫接続には using コンテキストへの追加の依存関係が含まれます。

させて

binding を使用すると、すべての子孫要素のバインディングで参照できるカスタム バインディング コンテキスト プロパティを定義できます。

<div data-bind="if: exibirMensagem">
    <p>Esta mensagem será exibida se 'exibirMensagem' for verdadeiro.</p>
</div>

<div data-bind="ifnot: exibirMensagem">
    <p>Esta mensagem será exibida se 'exibirMensagem' for falso.</p>
</div>
ログイン後にコピー

以上がKnockoutJs での制御フロー バインディングの仕組みの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

JavaScriptエンジン:実装の比較 JavaScriptエンジン:実装の比較 Apr 13, 2025 am 12:05 AM

さまざまなJavaScriptエンジンは、各エンジンの実装原則と最適化戦略が異なるため、JavaScriptコードを解析および実行するときに異なる効果をもたらします。 1。語彙分析:ソースコードを語彙ユニットに変換します。 2。文法分析:抽象的な構文ツリーを生成します。 3。最適化とコンパイル:JITコンパイラを介してマシンコードを生成します。 4。実行:マシンコードを実行します。 V8エンジンはインスタントコンピレーションと非表示クラスを通じて最適化され、Spidermonkeyはタイプ推論システムを使用して、同じコードで異なるパフォーマンスパフォーマンスをもたらします。

Python vs. JavaScript:学習曲線と使いやすさ Python vs. JavaScript:学習曲線と使いやすさ Apr 16, 2025 am 12:12 AM

Pythonは、スムーズな学習曲線と簡潔な構文を備えた初心者により適しています。 JavaScriptは、急な学習曲線と柔軟な構文を備えたフロントエンド開発に適しています。 1。Python構文は直感的で、データサイエンスやバックエンド開発に適しています。 2。JavaScriptは柔軟で、フロントエンドおよびサーバー側のプログラミングで広く使用されています。

C/CからJavaScriptへ:すべてがどのように機能するか C/CからJavaScriptへ:すべてがどのように機能するか Apr 14, 2025 am 12:05 AM

C/CからJavaScriptへのシフトには、動的なタイピング、ゴミ収集、非同期プログラミングへの適応が必要です。 1)C/Cは、手動メモリ管理を必要とする静的に型付けられた言語であり、JavaScriptは動的に型付けされ、ごみ収集が自動的に処理されます。 2)C/Cはマシンコードにコンパイルする必要がありますが、JavaScriptは解釈言語です。 3)JavaScriptは、閉鎖、プロトタイプチェーン、約束などの概念を導入します。これにより、柔軟性と非同期プログラミング機能が向上します。

JavaScriptとWeb:コア機能とユースケース JavaScriptとWeb:コア機能とユースケース Apr 18, 2025 am 12:19 AM

Web開発におけるJavaScriptの主な用途には、クライアントの相互作用、フォーム検証、非同期通信が含まれます。 1)DOM操作による動的なコンテンツの更新とユーザーインタラクション。 2)ユーザーエクスペリエンスを改善するためにデータを提出する前に、クライアントの検証が実行されます。 3)サーバーとのリフレッシュレス通信は、AJAXテクノロジーを通じて達成されます。

JavaScript in Action:実際の例とプロジェクト JavaScript in Action:実際の例とプロジェクト Apr 19, 2025 am 12:13 AM

現実世界でのJavaScriptのアプリケーションには、フロントエンドとバックエンドの開発が含まれます。 1)DOM操作とイベント処理を含むTODOリストアプリケーションを構築して、フロントエンドアプリケーションを表示します。 2)node.jsを介してRestfulapiを構築し、バックエンドアプリケーションをデモンストレーションします。

JavaScriptエンジンの理解:実装の詳細 JavaScriptエンジンの理解:実装の詳細 Apr 17, 2025 am 12:05 AM

JavaScriptエンジンが内部的にどのように機能するかを理解することは、開発者にとってより効率的なコードの作成とパフォーマンスのボトルネックと最適化戦略の理解に役立つためです。 1)エンジンのワークフローには、3つの段階が含まれます。解析、コンパイル、実行。 2)実行プロセス中、エンジンはインラインキャッシュや非表示クラスなどの動的最適化を実行します。 3)ベストプラクティスには、グローバル変数の避け、ループの最適化、constとletsの使用、閉鎖の過度の使用の回避が含まれます。

Python vs. JavaScript:コミュニティ、ライブラリ、リソース Python vs. JavaScript:コミュニティ、ライブラリ、リソース Apr 15, 2025 am 12:16 AM

PythonとJavaScriptには、コミュニティ、ライブラリ、リソースの観点から、独自の利点と短所があります。 1)Pythonコミュニティはフレンドリーで初心者に適していますが、フロントエンドの開発リソースはJavaScriptほど豊富ではありません。 2)Pythonはデータサイエンスおよび機械学習ライブラリで強力ですが、JavaScriptはフロントエンド開発ライブラリとフレームワークで優れています。 3)どちらも豊富な学習リソースを持っていますが、Pythonは公式文書から始めるのに適していますが、JavaScriptはMDNWebDocsにより優れています。選択は、プロジェクトのニーズと個人的な関心に基づいている必要があります。

Python vs. JavaScript:開発環境とツール Python vs. JavaScript:開発環境とツール Apr 26, 2025 am 12:09 AM

開発環境におけるPythonとJavaScriptの両方の選択が重要です。 1)Pythonの開発環境には、Pycharm、Jupyternotebook、Anacondaが含まれます。これらは、データサイエンスと迅速なプロトタイピングに適しています。 2)JavaScriptの開発環境には、フロントエンドおよびバックエンド開発に適したnode.js、vscode、およびwebpackが含まれます。プロジェクトのニーズに応じて適切なツールを選択すると、開発効率とプロジェクトの成功率が向上する可能性があります。

See all articles