Mvvm with knockout:数组绑定和更改内部对象状态

时间:2013-01-27 11:26:49

标签: mvvm knockout.js

我的View Model中有一个数组。此数组的项是具有两个属性的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>

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

1 个答案:

答案 0 :(得分:5)

你应该把它称为函数。像:

ppl[i].IsOnFacebook(false);

这是因为ko.observable()返回一个函数。它不是你打电话的属性,而是一个函数调用。因此,在后台他们将更新您的UI。撤回可观察的财产。您还应该使用函数调用。

请参阅本教程:http://learn.knockoutjs.com/#/?tutorial=intro

相关问题