Knockoutを認識し、どのようにKnockoutを使用してコンテキストを結合しますか?

2750 ワード

Knockout紹介
Knockout略称koは、軽量級のjavascriptクラスライブラリで、MVMデザインモード(すなわちModel、view、view、view Model)を採用して、簡単で優雅な双方向バインディングを実現して、リアルタイムで更新します.綺麗なデータモデルを使って、豊富な、応答式のユーザーインターフェースを作成します.
Knockoutには三つの核心特性があります.
    1.優雅な依存追跡(Elegant dependency trocing):データモデルの変化はいつでも自動的にUI部分を更新します.
    2.声明式バインディング(Declarative bindings):簡単にUIとデータモデルを関連付けると、複雑な動的UIが作成できます.
    3.高度の拡張可能性(Trivially extenssible):いくつかの行のコードで定義的な行動を実行して声明式のバインディングとします.
その他の利点:
    1.純粋なjavascriptコード.
    2.いつでもあなたの既存のwebアプリケーションに追加できます.
    3.ライト級、GZIP後は13 Kしかないです.
    4.ほとんどの主流ブラウザ(IE 6+、Firefox 2+、Chrome、Safari、Edge、others)で動作することができます.
koはMVVMデザイン、すなわちmodel view view Modelを採用しています.
簡単な例

There are  items 
このように簡単です.コードを書く必要がないので、textの内容を更新します.配列長が変わると自動的に更新されます.これと同じように、配列長制御ボタンの利用可能性を利用したいなら、必要なだけです.

次にKnockoutを使って結合するコンテキストを紹介します.
Binding context
binding contextはデータを保存する対象です.あなたのバインディングからそれを引用してもいいです.バインディングを適用すると、自動的にbinding contextの継承関係を作成して管理します.このような階層構造の根はあなたが指定したview Modelパラメータを参照します.
そして、各制御ストリームをwithまたはforeachのように使用して、サブノードbinding contextを作成し、入れ子のview Model dataを参照する.
$parent


is the manager of

$parents

这是一个数组,代表了所有的父节点view models

$parent[0] : 代表父节点;

$parent[1] : 代表祖父节点;

$parent[1] : 代表曾祖父节点;

.....以此类推

$root

它是root context的根节点视图模型对象,一般是通过ko.applyBindings指定的,相当于$parents[$parents.length - 1]。

$component

如果你在一个特定的组件模板的上下文中,$component指定的是那个component,它的指定组件相当于$root,在嵌套的组件情况下,它代表了最邻近的一个组件。

$data

它代表了当前上下文中的viewModel对象,$data和$root是相当的。在嵌套的binding context中,这个参数将设置到当前的数据项。

$data是非常有用的,例如,当你想引用viewModel本身而不是viewModel的属性的时候。


  • The value is
  • $index(foreach bindingでのみ使用可能)
    これはforeachバインディング中の配列の0から始まる索引項目です.他のcontext属性を望まないでください.indexはobservableで、つまり配列itemの更新によって更新されます.
    $parent Context
    親ノードレベルを指定したbinding contextオブジェクトは、$parentとは異なり、親ノードでbinding contextではなくデータを指定します.
    $rowData
    これは現在のコンテキストでは、元のビューModelの値は、通常は$dataに相当しますが、もしview Modelがkoによってobservableで修飾されたら、$dataはunobservableであり、一方、rowDataはobservableであります.