Knockout、Observableとcomputtedを理解します.
3689 ワード
KOは何ですか
KOは万能ではありません.主に次の問題を便利に解決するために現れます. UI要素が多く、ユーザーのインタラクションが頻繁で、大量のマニュアルコードを作成してUI要素の状態、スタイルなどの属性を維持する必要がありますか? UI要素の間の関係は比較的緊密であり、例えば、1つの要素を操作する場合、他の要素の状態を変更する必要がありますか? DOM要素とJsオブジェクトの間のデータ同期? フロントエンドjavascriptコードの組織は理想的ではありませんか?ユーザがデータチェック、DOM操作、バックグラウンドインタラクションを入力します. 基礎概念一:view Modelは、UIイベントの応答を担当し、ユーザの操作に応答する. は、例えば、Studentモデルが、UI要素とModelとの間でデータを同期させる(ユーザがinput-->koを修正してmodelを修正する) などの領域モデルを保存する責任がある.必要な時に、Helper方法を使って簡単にview ModelからServerに渡すべきデータを分離して、ajax方式でバックグラウンドと対話することができます. は、Server端末から送信されたデータ(Ajax要求かもしれない)を受信し、モデルデータを更新し、UIプレゼンテーションを更新する責任を負う. 基礎概念2:Observableとcomputed
KOのすべてのアプリケーションシーンを見ると、基本的にこの2つの属性は少なくとも1つを使用します.これはKOの一番よく使うものだと思います.彼らの使い方は以下の通りです. Observable(監視属性):自身の属性の変化を監視し、外部に通知を送信する.外部はsubscribe法によって属性の変化イベントを購読する. Computed(依存性):初期バージョンではdependent Observableと呼ばれ、通常は他のObservableに依存し、計算によって自分のデータを得る.依存項が変更されると、computted属性は通知を受け、自身 を同時に更新する.
*ここで2時を言います本明細書では「属性」と呼ばれていますが、本質的には彼らはjsのfunctionオブジェクトですので、訪問する時は()番号 を追加する必要があります.のデフォルトでは、Computedの同期は任意のObservableの変化の時に発生しますが、場合によっては、ユーザーが入力しているときなど、このように頻繁に更新してほしくない場合があります.KOは他の方法で更新を遅らせることができます.このシリーズの後に専門的な文章が紹介されます. この章のポイントは、この2つの基本的な属性の使い方を説明し、後の「実例解説」で詳しく説明します.
KOバインディングを有効にするにはどうすればいいですか?
KOにおいて、バインディングはアクティブ化される必要があり、HtmlドキュメントのDOM要素とview Modelのデータを分析し、関連付けすると理解できる.
通常は、ページ要素、view Modelデータの読み込みが完了したら、バインディングをアクティブにすることができます.もちろんいつでも結合したい時にアクティブにしてもいいです.
次のコードだけが必要です.は、KO検索バインディングの範囲を縮小することができます(つまり、全ページでbindingを行う必要があります). 複数のview Modelを同時に使用して、それぞれ異なるエリアのバインディングを担当してもいいです.haha… 簡単です.パラメータを追加すればいいです.
基本文法
1、定義
KOは万能ではありません.主に次の問題を便利に解決するために現れます.
KOのすべてのアプリケーションシーンを見ると、基本的にこの2つの属性は少なくとも1つを使用します.これはKOの一番よく使うものだと思います.彼らの使い方は以下の通りです.
*ここで2時を言います
KOバインディングを有効にするにはどうすればいいですか?
KOにおいて、バインディングはアクティブ化される必要があり、HtmlドキュメントのDOM要素とview Modelのデータを分析し、関連付けすると理解できる.
通常は、ページ要素、view Modelデータの読み込みが完了したら、バインディングをアクティブにすることができます.もちろんいつでも結合したい時にアクティブにしてもいいです.
次のコードだけが必要です.
var model = new AppViewModel();// viewModel
ko.applyBindings(model); //
このようにKOは全体のBodyの中でバインディングする必要がある要素を探して、view Modelとバインディングします.もちろん、バインディングのルートノードを指定することもできます.var model = new AppViewModel();
ko.applyBindings(model, document.getElementById("Demo1")); //Demo1 Div
実例解説:Observable基本文法
1、定義
var myViewModel = {
personName: ko.observable('Bob'),// personName
personAge: ko.observable(123)// personAge
};
2、読みだしvar a=myViewModel.personName();//a 'Bob'
3、書き込み、連続書込み(チェーンコール)myViewModel.personName('Mary').personAge(50);// 2
4、属性変更イベントの購読myViewModel.personName.subscribe(function(newValue) {
alert("The person's new name is " + newValue);
});
myViewModel.personName(' ');// alert