例えば
function Model(){};
var model = new Model();
ko.applyBinding(model);
model.name = ko.observable('john');
コードが機能しないことはわかっていますが、機能させることは可能ですか?
例えば
function Model(){};
var model = new Model();
ko.applyBinding(model);
model.name = ko.observable('john');
コードが機能しないことはわかっていますが、機能させることは可能ですか?
これは、cleanNode を使用してバインディングを再適用することで実現できました。
function Model(){};
var model = new Model();
ko.applyBindings(model);
model.name = ko.observable('john');
var myDiv = $('#myDiv')[0];
ko.cleanNode(myDiv);
ko.applyBindings(model, myDiv);
<div id="myDiv">
<span data-bind="text: name"></span>
</div>
考えられる解決策は、部分的なビューにバインドすることです。次に例を示します。
<div id="viewOne">
<input data-bind="value: name" />
</div>
<div id="viewTwo">
<input data-bind="value: name" />
</div>
<script type="text/javascript">
var viewModelA = {
name: ko.observable("John")
};
var viewModelB = {
name: ko.observable("Doe")
};
ko.applyBindings(viewModelA, document.getElementById("viewOne"));
ko.applyBindings(viewModelB, document.getElementById("viewTwo"));
</script>
したがって、あなたの場合、新しいプロパティを追加した後、新しいデータを必要とするビューの部分にのみバインディングを再度適用できます。
これは、applyBindings 関数を取得して div を 1 つだけ追加できるはずです。現在、自分のアプリケーションで自分で試しています。ただし、これまでのところあまり幸運ではありません。アプリケーションでどのように反応するかわかりません。
ko.applyBindings(model, document.getElementById('#yourdiv'));
モデルをバインドするだけで applyBindings を呼び出すと、オブジェクトに追加のバインディングが作成されます。これはお勧めできません。
function Model(){};
var model = new Model();
model.name = ko.observable('john');
ko.applyBindings(model);
model.street = ko.observable('stationstreet');
ko.applyBindings(model);
後者は、street オブジェクトに 1 つのバインディングを作成しますが、name オブジェクトには 2 番目のバインディングを作成します。
おそらく、もう一度電話する必要がありますko.applyBindings
。でもうまくいくかどうかはわかりません。そうでない場合は、おそらく KnockoutJS コードを調べて何applyBindings
が機能しているかを調べてから、新しいバインディングに部分的に適用するために呼び出す必要がある関数を特定する必要があります。
ko.applyBindingsを再度呼び出す必要はありません。ほとんどの場合、バインディングコードはhtmlコードの前に呼び出されます。applyBindingをドキュメントの準備ができた状態に移動すると、すべて問題ありません。
jqueryの場合:
$(function () {
ko.applyBindings(viewModel);
});