0

学习 KnockoutJS 并碰壁。为游戏制作计算器。总结版本如下:

用户输入“neededXp”。每次更新“neededXp”时,数组都应该重新计算“need”。

self.neededXp = ko.observable(0);

function calcItem(name, image, xp, level) {
    this.name = name;
    this.level = level;
    this.xp = xp;
    this.need = ko.computed(function() {
        var req = self.neededXp()/this.xp;
        return req;
    });
}

self.calcContent = ko.observableArray([

]);

self.populateFishing = function() { 
self.calcContent.push(calcItem('Shrimp','#',1,10));
self.calcContent.push(calcItem('Sardine','#',5,20));
self.calcContent.push(calcItem('Shark','#',110,76));
self.calcContent.push(calcItem('Sea Turtle','#',38,79));
self.calcContent.push(calcItem('Manta Ray','#',46,81));
    }

目前,它第一次完美计算,并且似乎在更新“neededXp”时,它会使用正确的“neededXp”重新计算所有值,但是数组中每个索引的计算 observable 从数组的最后一个成员。

澄清一下,当我更新“neededXp”时,所有成员“需要”都使用Manta Ray值中的“xp”重新计算,而不是它们各自的索引。

可能真的很明显,希望有人可以指导我。

编辑:重新阅读我的代码后,我想我可以明白为什么会这样,但我不知道如何解决。如果有意义的话,我不知道如何维护数组中的“xp”值。

EDIT2: http: //jsfiddle.net/sTnY7/ jsfiddle 为可用性减小了数组大小。点击鱼按钮来填充表格,然后将“目标级别”更改为 6 以最简单地演示问题。这就是问题发生的地方——所有“#Required”都从数组的最后一个成员中获取 XP 值并重新计算。如果目标级别为 6,则显示 102.2 - 例如,“虾”应为 511。

希望这是有道理的。

4

1 回答 1

1

好的 - 所以我自己创造了一个小提琴

http://jsfiddle.net/dD67p/2/

不得不做出一些改变——

范围(正如我所怀疑的) - calcItem 现在看起来像这样:

function calcItem(name, image, xp, level) {
    var self2 = this;
    self2.name = name;
    self2.level = level;
    self2.xp = xp;
    self2.need = ko.computed(function () {
        var req = self.neededXp() / self2.xp;
        return req;
    });

此外,您错过了new创建calcItem对象并将它们推送到calcContent.

我变成populateFishing了样子

self.populateFishing = function () {
    self.calcContent.push(new calcItem('Shrimp', '#', 1, 10));
    self.calcContent.push(new calcItem('Sardine', '#', 5, 20));
    self.calcContent.push(new calcItem('Shark', '#', 110, 76));
    self.calcContent.push(new calcItem('Sea Turtle', '#', 38, 79));
    self.calcContent.push(new calcItem('Manta Ray', '#', 46, 81));
}

您可以在此小提琴中看到更新所需Xp 时绑定的数据更改。

于 2013-03-06T01:54:39.990 回答