2013-10-26 66 views
0

我有一個循環,用於更改計算變量中使用的Knockout可觀察變量。我有一個跨度綁定到該計算變量。當我運行它時,該跨度的UI不會改變。整數值被髮布到控制檯,所以我知道正在處理計算的變量。Knockout.js計算的值不更新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> 

我有綁定到其他觀測和computeds在 'PlayerViewModel' 也和那些正在工作的其他DOM元素。不應該在文本循環運行時自動更改文本。目前不是。

任何幫助表示讚賞!謝謝!

+0

您的console.log是否正在燒製? –

+0

是的,我在控制檯中得到一堆整數。 – user2653364

+0

您的代碼[似乎正在工作](http://jsfiddle.net/ZZk7J/)對我來說。 – Jeroen

回答

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改變。