2

仅从 knockout.js 开始,但在尝试computed基于 2 个不同observableArray的 s制作方法时已经遇到了一些麻烦

使用 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. (我不认为这是我想要的)。

有什么干净的方法可以实现我想要做的事情吗?还是我必须对 2 个不同的调用arrayForEach,每个数组一个?

4

2 回答 2

6

改变:

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

至:

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

在您的 TotalAmount ko.computed 函数中。

this在您计算的上下文中是指全局对象而不是视图模型。因此,您需要使用之前self分配了正确this值的变量。

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

于 2013-10-07T09:31:25.967 回答
6

concat对我不起作用..我做到了push

self.Products.push.apply( 
  self.Products, self.Products2()
);
于 2015-01-20T13:21:33.763 回答