1

これがフィドルです。

ユーザーの操作後にデータの一部が利用可能になるビューモデルがあります。

applyBindingsドキュメントの準備ができた時点で既に呼び出されているのに、ボタン クリック イベント中にもう一度呼び出す必要があるのはなぜですか?

HTML:

<p>first name:
    <input type="text" data-bind="value: ray.firstName" />
</p>
<p>last name:
    <input type="text" data-bind="value: ray.lastName" />
</p>
<p>first name:
    <input type="text" data-bind="value: joe.firstName" />
</p>
<p>last name:
    <input type="text" data-bind="value: joe.lastName" />
</p>

JS:

function person(firstNm, lastNm) {
    this.firstName = firstNm;
    this.lastName = lastNm;
}

function myApp() {
    this.ray = new person();
    this.joe = new person();
}

var app = new myApp();
app.ray = new person('ray', 'cheng');
ko.applyBindings(app);

$('#showName').on('click', function () {
    app.joe = new person('joe', 'public');
    ko.applyBindings(app); // <-- why is this needed since applyBindings already called above.
});
4

1 に答える 1

2

observablesapplyBindingsを使用していないため、2 回呼び出す必要があります。また、オブザーバブルがないと、Knockout はオブジェクトが変更されたことを追跡できないため、UI を変更できません。

ビューモデルは次のようになります。

function app() {
    this.ray = ko.observable(new person());
    this.joe = ko.observable(new person());
}

関数を返すためko.observable、次のように設定する必要があります。

app.ray(new person('ray', 'cheng'));
app.joe(new person('joe', 'public')); 

式の値を取得するには、その値を取得するのと同じように、引数なしdata-bindで を呼び出す必要があります。ko.observableray().firstName

<input type="text" data-bind="value: ray().firstName" />

JSFiddle のデモ。

于 2013-04-23T19:14:04.320 に答える