computed observableArray不更新UI

时间:2012-12-06 14:18:08

标签: knockout.js knockout-2.0

我有一个主要的ko.observableArray,我从它创建了三个计算的可观察数组,并将三个数组绑定到UI。代码是

self.ActiveVisitsList = ko.observableArray();

self.FVL = ko.computed(function () {
    return ko.utils.arrayFilter(self.ActiveVisitsList(), function (o) {
        return o.CsrID == 0;
    });
}, self);

self.MVL = ko.computed(function () {
    return ko.utils.arrayFilter(self.ActiveVisitsList(), function (o) {
        return o.CsrID == self.Me().ID;
    });
}, self);

self.OVL = ko.computed(function ()
{
    return ko.utils.arrayFilter(self.ActiveVisitsList(), function (o) {
        return (o.CsrID != self.Me().ID && o.CsrID != 0);
    });
}, self);

经过一段时间,主observableArray“ActiveVisitorsList”中的一个对象,其CsrID从0变为某个其他值,但绑定的UI不反映。有没有什么办法可以用模型或其他东西手动重新绑定UI以使其工作?

谢谢, Aadil。

1 个答案:

答案 0 :(得分:3)

如果您将CsrID定义为observable,则会自动更新UI。在这里你必须修改你的计算机:

self.FVL = ko.computed(function () {
    return ko.utils.arrayFilter(self.ActiveVisitsList(), function (o) {
        return o.CsrID() == 0;
    });
}, self);

self.MVL = ko.computed(function () {
    return ko.utils.arrayFilter(self.ActiveVisitsList(), function (o) {
        return o.CsrID() == self.Me().ID;
    });
}, self);

self.OVL = ko.computed(function ()
{
    return ko.utils.arrayFilter(self.ActiveVisitsList(), function (o) {
        return (o.CsrID() != self.Me().ID && o.CsrID != 0);
    });
}, self);