私はビューとビューモデルを結合し、ノックアウトjsが、バインディングコンテキストとビューモデルは非常に混乱している
var viewModel = {
name: ko.observable('Steve')
};
ko.applyBindings(viewModel);
はdiv要素は、名前のスティーブを示しJavaScriptの
HTML
<div data-bind="text: $data.name"></div>
。バインディングコンテキストには$ dataプロパティが含まれており、$ dataが参照するviewModelの名前をdiv要素にバインドします。という事は承知しています。しかし、私が理解していないのは、divタグのデータバインドで$データを削除しても、それはまだ機能しているということです。 $ dataがなければ、nameは存在しない "name"というバインディングコンテキスト内のプロパティを直接参照していませんか? $データが存在しない場合のボンネットの下で何が起こるのですか?
バインディングコンテキストはViewModelにオブジェクトです。 $ dataはviewModelも参照しています。そのため、データバインド属性で$ dataを省略することが可能です。 –
@MaheshWarrier。バインディングコンテキストは、$ data、$ rootなどの特殊なプロパティを含むオブジェクトであり、バインディングコンテキストがviewModelの場合、これらのプロパティは含まれていない必要があります。 –
ノックアウトは、applyBindingsを呼び出すときに、ビューモデルにこれらのプロパティを追加します。あなたが本当にぎこちなく欲しいのであれば、ソースコードhttp://knockoutjs.com/downloads/knockout-3.4.0.debug.jsを見ることができます。具体的には、applyBindings関数 –