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;

第二次单击该按钮时,警报确实显示值已更改。

这是我的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添加或删除。

因此,为了跟踪项目内部的更改并自动更新 UI,您需要创建属性ko.observable

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

并且在editclick你需要设置enabledwith: user.enabled(true);(因为ko.observable返回一个函数)

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

演示JSFiddle。

于 2013-04-18T11:30:58.073 回答