Javascript 使用knockoutjs在数组中的项中创建计算值

Javascript 使用knockoutjs在数组中的项中创建计算值,javascript,arrays,knockout.js,Javascript,Arrays,Knockout.js,我正试图让数组中的一些项作为计时器事件的函数进行更新。但我无法确定如何在淘汰赛中获胜。。。我更觉得自己有点累了 我认为问题很简单,也许我的方法是错误的,或者只是有些东西我不明白 更详细地说: 数组中的每个项都表示自“某物”以来的时间,为了防止从服务器重新加载,正如您所看到的,我已绑定到我定义的ko.computed(display)函数,该函数应该接受items.timeappeased并添加自加载页面以来的时间self.moretimepeased() html: <div>

我正试图让数组中的一些项作为计时器事件的函数进行更新。但我无法确定如何在淘汰赛中获胜。。。我更觉得自己有点累了

我认为问题很简单,也许我的方法是错误的,或者只是有些东西我不明白

更详细地说:

数组中的每个项都表示自“某物”以来的时间,为了防止从服务器重新加载,正如您所看到的,我已绑定到我定义的ko.computed(display)函数,该函数应该接受items.timeappeased并添加自加载页面以来的时间self.moretimepeased()

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 = 'someone@example.com';

        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>

函数myViewModel(){
var self=这个;
self.emailsomeone@example.com';
var d=新日期();
self.startTime=d.getTime();
self.moretimeessed=ko.可观察(0);
var items=[{“name”:“counter1”,“timeappeased”:168},{“name”:“counter2”,“timeappeased”:162}];
对于(i=0;i

任何提示或想法都值得赞赏。

问题在于计数器“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);
var items=[{“name”:“counter1”,“timeappeased”:1706},{“name”:“counter2”,“timeappeased”:1700}];
var attachDisplayFunc=函数(项){
item.display=ko.computed(函数(){
return item.timeappeased+self.moreTimeAppeased();
})
}
对于(i=0;i

所以。。有没有办法在出现这样的错误时得到通知?

问题在于计数器“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);
var items=[{“name”:“counter1”,“timeappeased”:1706},{“name”:“counter2”,“timeappeased”:1700}];
var attachDisplayFunc=函数(项){
item.display=ko.computed(函数(){
return item.timeappeased+self.moreTimeAppeased();
})
}
对于(i=0;i

所以。。有没有办法在出现这样的错误时得到通知?

嗯。。。没有。但是我很高兴你通过定义一个独立的函数解决了你的问题。这比使用愚蠢的iLife hack要好得多,这正是为什么用来解决这个问题的
let
关键字是不必要的。。。没有。但是我很高兴你通过定义一个独立的函数解决了你的问题。这比使用愚蠢的iLife hack要好得多,这就是为什么不需要引入
let
关键字来解决这个问题的原因。