仅以 knockout.js 开头,但是在尝试基于两种不同的computed
创建observableArray
方法时已经遇到了一些麻烦
通过使用 knockout 网站上的文档,我创建了以下 View 模型:
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
进行2个不同的调用,每个数组一个? 最佳答案
更改:
this.Products().concat(this.Products2()),
至:
self.Products().concat(self.Products2()),
在TotalAmount ko.computed函数中。
您计算的上下文中的
this
是指全局对象,而不是 View 模型。因此,您需要使用较早分配了正确self
值的this
变量。工作示例-ojit_a
关于javascript - kickout.js:在observableArray上没有concat,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19221174/