仅以 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变量。

工作示例-o​​jit_a

关于javascript - kickout.js:在observableArray上没有concat,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19221174/

10-11 12:50