带敲除的Mvvm:数组绑定和更改内部对象状态

带敲除的Mvvm:数组绑定和更改内部对象状态,mvvm,knockout.js,Mvvm,Knockout.js,我的视图模型中有一个数组。此数组的项是具有两个属性的Person对象。当我把它绑定到一个模板上时,它就可以了。但当我更改其中一个属性的状态时,它不会反映在UI中 我做错了什么 <script type="text/html" id="person-template"> <p>Name: <span data-bind="text: name"></span></p> <p> Is On Fac

我的视图模型中有一个数组。此数组的项是具有两个属性的Person对象。当我把它绑定到一个模板上时,它就可以了。但当我更改其中一个属性的状态时,它不会反映在UI中

我做错了什么

<script type="text/html" id="person-template">
    <p>Name: <span data-bind="text: name"></span></p>
    <p>
        Is On Facebook ?
        <input type="checkbox" data-bind="checked: IsOnFacebook" />
    </p>
</script>

<script type="text/javascript">
    var ppl = [
            { name: 'Pouyan', IsOnFacebook: ko.observable(true) },
            { name: 'Reza', IsOnFacebook: ko.observable(false) }
    ];
    function MyViewModel() {
        this.people = ko.observableArray(ppl),
        this.toggle = function () {
            for (var i = 0; i < ppl.length; i++) {
                ppl[i].IsOnFacebook = false;
            }
        }
    }
    ko.applyBindings(new MyViewModel());
</script>

姓名:

是在Facebook上吗?

变量ppl=[ {名称:'Pouyan',IsOnFacebook:ko.observable(true)}, {name:'Reza',IsOnFacebook:ko.observable(false)} ]; 函数MyViewModel(){ this.people=ko.array(ppl), this.toggle=函数(){ 对于(变量i=0;i

当我按下按钮时,我想更改People.IsOnFacebook属性。更改将成功进行,但UI不会显示。

您应该像调用函数一样调用它。比如:

ppl[i].IsOnFacebook(false);
这是因为
ko.observable()
返回一个函数。它不再是您调用的属性,而是函数调用。所以在后台他们会更新你的用户界面。检索可观察到的属性。您还应该使用函数调用


请参阅本教程:

您应该像调用函数一样调用它。比如:

ppl[i].IsOnFacebook(false);
这是因为
ko.observable()
返回一个函数。它不再是您调用的属性,而是函数调用。所以在后台他们会更新你的用户界面。检索可观察到的属性。您还应该使用函数调用

请参阅本教程: