8

次のようなビューモデルがあります。

    var viewModel =
    {
        firstName: 'Fred'
    }

このようにそれにバインドされたテキストボックス

<input data-bind="value: firstName" >

firstName プロパティは監視可能ではないため、これは一方向バインディングを設定するという印象を受けました。テキスト ボックスへの変更により、viewModel オブジェクトが更新されます。私の仮定が間違っている場合、誰かが何が起こっているのか、どのように説明できますか?

4

3 に答える 3

4

一方向バインディングの手段: UI の変更 (入力の入力) は、ビュー モデルに「適用」されます。ただし、viewModel を (コードで) 変更すると、UI は更新されません。

コード (js) で UI を更新する必要がある場合は、オブザーバブルを使用する必要があります。

このフィドルでわかるように、[コードで変更] ボタンをクリックすると、ビュー モデルは変更されますが、UI は変更されません。

var viewModel = {
    firstName: 'Fred',
    test: function () {
        alert(viewModel.firstName);
    },
    change: function () {
        viewModel.firstName = "new Value";
    }
};

フィドルを参照してください

お役に立てば幸いです。

于 2013-09-10T05:54:18.520 に答える
1

前述のようにプロパティがオブザーバブルである場合、それを実行すると、バインドされたフォーム フィールドが変更されたときに更新されなくなります。ビューモデルのプロパティが監視可能でない場合、フォームの変更がビューモデルに適用されないようにする別のハックは、次のように、プロパティに直接ではなく、式にバインドすることです。

var viewModel =
{
    firstName: 'Fred',
    age: 25,
}

HTML:

<input data-bind="value: (firstName + '')" />
<input data-bind="value: (age + 0)" />
于 2015-02-19T19:36:39.807 に答える