2012-12-20 56 views
0

我在这个例子中肯定漏掉了一些东西。任何人都可以让我知道什么可能是错的?knockoutjs没有更新

链接:http://jsfiddle.net/EBxy4/42/

屏:shared screen

当您更新行1箱1的值,在低角值不会改变。

的代码是:

<td><input data-bind="value: week1Amount()" /></td> 

有:

function revenueStream(w1, w2, w3) { 
    var self = this; 
    self.week1Amount = ko.observable(w1); 
    self.week2Amount = ko.observable(w2); 
    self.week3Amount = ko.observable(w3); 
} 

function revenueStreamCategory(revenueStreams) { 
    var self = this; 
    self.revenueStreams = ko.observalrevenueStreams; 

    self.week1Sum = ko.computed(function() { 
     var sum = 0.0; 

     ko.utils.arrayForEach(self.revenueStreams, function(item) { 
      sum += item.week1Amount(); 
     });  
     return sum; 
    });  
} 

var rs = []; 
rs.push(new revenueStream(10, 11, 12)); 
rs.push(new revenueStream(13, 14, 15));  
rs.push(new revenueStream(16, 17, 18)); 

var vm = new revenueStreamCategory(rs);  

ko.applyBindings(vm, document.getElementById("test"));​ 

回答

1

你的问题是在你的绑定,更换此

<td><input data-bind="value: week1Amount" /></td> 

这里的工作小提琴:

http://jsfiddle.net/EBxy4/44/

我甚至修复了连接而不是总结的小计!

+0

谢谢。你可以看看这个:http://jsfiddle.net/EBxy4/60/? –

+0

@ user1919252:你在一个问题中提出了两个问题,但是我想出了这个问题(http://jsfiddle.net/EBxy4/63/)。当你创建一个observableArray时,它只是观察添加或删除数组中的项目。它不会自动将任何数据放入数组中,因此我将数据包装在另一个类中。如果将所有数据声明为'revenueData'对您而言过于冗长,则可以随时将代码添加到'revenueStream'类中以自动转换您的数字数组。 –

+0

谢谢,马特。我道歉在这里问了两个问题。只是想看看是否有人在这里知道解决我的难题的方法。我同意你关于可观察阵列的观点。使用数组可能会使其更具可扩展性,并且更易于初始化。考虑到我们是否需要扩展到13周,非硬编码week1Amount,week2Amount的好处是显而易见的。 –