2013-10-07 71 views
1

沒有CONCAT只有開始knockout.js,但是當試圖使computed方法基於2個不同的observableArray小號knockout.js:上observableArray

使用上knockout.js'網站上的文檔已經運行了一些麻煩,我創建了以下視圖模型:

var Cart = function() { 
    var self = this; 

    self.Products = ko.observableArray([]); 
    self.Products2 = ko.observableArray([]); 
    self.Messages = ko.observableArray([]); 

    self.TotalAmount = ko.computed(function() { 
    var result = 0; 
    ko.utils.arrayForEach(
     this.Products().concat(this.Products2()), 
     function(item) { 
     result+=item.AmountIncludingVAT(); 
     } 
    ); 
    return result; 
    }); 
}; 

這樣做,這將引發的"Uncaught TypeError: Object #<error> has no method 'concat'錯誤。

我知道這個函數叫做arrayPushAll,但它是一個破壞性的函數,它會改變原來的observableArray。 (我不認爲這是我想要的東西)。

有沒有乾淨方式來實現我想要做的?或者我必須撥打arrayForEach兩個不同的電話,每個陣列一個?

+0

別的東西是你的代碼錯誤。儘管'observableArray'沒有'concat'方法,但是數組有。用'this.Products()'你可以展開observable並在數組上工作。所以請創建一個顯示此錯誤的工作JSFIddle! – nemesv

回答

5

變化:

this.Products().concat(this.Products2()), 

到:

self.Products().concat(self.Products2()), 

內,您的總金額ko.computed功能。

this在您計算的上下文中引用全局對象而不是視圖模型。因此,您需要使用前面指定了正確的this值的self變量。

工作實例 - http://jsfiddle.net/55kZp/

+0

好吧,我的部分愚蠢的錯誤我想:) – Kippie

4

concat沒有爲我工作。我做了push

self.Products.push.apply( 
    self.Products, self.Products2() 
); 
相關問題