1

ビュー モデルに、配列の有効な値を false から true に変更する関数があります。

  editclick: function (user) {
     user.enabled = true;
     return true;
  }

変更を表示するアラートを設定した場合

user.enabled = true;
alert(ko.toJSON(user));

変更されたことを示していますが、バインド値は変更されていません。

変化の前にアラートを置くと

alert(ko.toJSON(user));
user.enabled = true;

ボタンを 2 回目にクリックすると、値が変更されたことを示すアラートが表示されます。

これが私のjsFiddleと私が使用するコードです。

[JS]

var myViewModel = {
  myarray: ko.observableArray([{
     myname: 'Bob',
     mysurname: 'Smith',
     enabled: false
  }, {
     myname: 'John',
     mysurname: 'Smith',
     enabled: false
  }]),
  editclick: function (user) {
     user.enabled = true;
     alert(ko.toJSON(user));
     return true;
  }
};

[コード]

<Table border="1" cellpadding="5" cellspacing="0">
 <thead>
    <tr>
        <td>Button</td>
        <td>Value</td>
    </tr>
 </thead>
 <tbody data-bind="foreach: myarray">
    <tr>
        <td>
            <input type="button" value="Change" data-bind="click: $root.editclick" />
        </td>
        <td><span data-bind="text: enabled" />
        </td>
    </tr>
 </tbody>
</Table>

変更によってビューモデルが更新されないようです。これを機能させるために離れていますか。

ありがとう

4

1 に答える 1

2

アイテムのko.observableArray追加または削除のみを追跡します。

したがって、アイテム内の変更を KO 追跡し、UI を自動的に更新するには、プロパティを作成する必要がありますko.observable

myarray: ko.observableArray([{
         myname: 'Bob',
         mysurname: 'Smith',
         enabled: ko.observable(false)
     }, {
         myname: 'John',
         mysurname: 'Smith',
         enabled: ko.observable(false)
     }])

そして、 with:editclickを設定する必要があります(が関数を返すため)enableduser.enabled(true);ko.observable

editclick: function (user) {
         user.enabled(true);
         alert(ko.toJSON(user));
         return true;
     }

JSFiddle のデモ。

于 2013-04-18T11:30:58.073 に答える