Knockout.js计算的值不更新UI

时间:2013-10-26 20:53:59

标签: user-interface knockout.js updating observable

我有一个循环,用于更改在计算变量中使用的Knockout可观察变量。我有一个绑定到该计算变量的跨度。当我运行它时,该跨度的UI不会改变。整数值正在发布到控制台,因此我知道正在处理计算变量。

这是我的JS:

var PlayerViewModel = function () {
    var self = this;

    self.NumberOfLoops = ko.observable(0);
    self.StartLoopTime = ko.observable(new Date());

    self.LoopsPerMinute = ko.computed(function () {
        var a = self.NumberOfLoops();
        var b = new Date() - self.StartLoopTime();
        var c = a / ((b) / 60000);
        var d = Math.round(c);
        console.log(d);
        return d;
    });

    self.Loop = function () {
        //..Stuff..

        var count = self.NumberOfLoops();
        count = count + 1;
        self.NumberOfLoops(count);

        //..More Stuff..
        //Call self.Loop again
    };
}

HTML:

<span data-bind="text: LoopsPerMinute">0</span>

我还有其他DOM元素绑定到其他可观察对象并在'PlayerViewModel'中计算,并且这些元素正在运行。在循环运行时,不应该跨越文本自动更改。目前不是。

任何帮助表示赞赏!谢谢!

1 个答案:

答案 0 :(得分:0)

你可以做到

self.Loop = function () {
    //..Stuff..

    var count = self.NumberOfLoops();
    count = count + 1;
    self.NumberOfLoops(count);

    //..More Stuff..
    setTimeout(function()
    {
       self.Loop();
    }, 0)
};    

JSFiddle DEMO

在这种情况下,每次更改self.NumberOfLoops时,视图都会更新。