我正在尝试获取数组中的某些项目以根据计时器事件进行更新。但是我无法确定如何进行淘汰赛……更多的是我自己被淘汰了。
我认为问题很简单,也许我的方法是错误的,或者仅仅是我没有得到某些东西。
要更详细一点:
数组中的每个项代表自“某物”发生以来的时间,为防止从服务器重新加载,如您所见,我已绑定到我定义的ko.computed(display)函数,该函数应该接收这些项。 timeElapsed并添加自页面加载以来的时间self.moreTimeElapsed()
的HTML:
<div>
<ul data-bind="foreach: counted">
<li><span data-bind="text: name"></span> - <span data-bind="text: display"></span></li>
</ul>
</div>
和ViewModel
<script type="text/javascript">
function myViewModel() {
var self = this;
self.email = '[email protected]';
var d = new Date();
self.startTime = d.getTime();
self.moreTimeElapsed = ko.observable(0);
var items = [{"name":"counter1","timeElapsed":168},{"name":"counter2","timeElapsed":162}];
for (i = 0; i < items.length; ++i)
{
items[i].display = ko.computed(function ()
{
return items[i].timeElapsed + self.moreTimeElapsed();
})
}
self.counted = ko.observableArray(items);
self.updateCounters = function () {
var d = new Date();
self.moreTimeElapsed(d.getTime() - self.startTime);
}
setInterval(self.updateCounters, 3000);
};
ko.applyBindings(new myViewModel());
function Reload() {
location.reload(true);
}
</script>
任何提示或想法表示赞赏。
最佳答案
问题在于计数器“ i”超出范围。
我将代码包装在一个闭合中,这解决了问题
var items = [{"name":"counter1","timeElapsed":1706},{"name":"counter2","timeElapsed":1700}];
var attachDisplayFunc = function(item) {
item.display = ko.computed(function () {
return item.timeElapsed + self.moreTimeElapsed();
})
}
for (i = 0; i < items.length; ++i) {
attachDisplayFunc(items[i]);
}
self.counted = ko.observableArray(items);
所以..有什么办法可以得到这样的错误通知?