knockout.js:observableArray上没有concat

Kip*_*pie 2 javascript knockout.js

只能从knockout.js开始,但在尝试computed基于2个不同的observableArrays 创建方法时已经遇到了一些麻烦

使用knockout.js网站上的文档,我创建了以下viewmodel:

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;
  });
};
Run Code Online (Sandbox Code Playgroud)

这样做会引发错误"Uncaught TypeError: Object #<error> has no method 'concat'.

我知道有这个函数叫arrayPushAll,但它是一个破坏性的功能,会改变原来的observableArray.(我不认为这是我想要的).

是否有任何干净的方法来实现我想要做的事情?或者我必须进行两次不同的呼叫arrayForEach,每个阵列一次?

Ric*_*ton 6

更改:

this.Products().concat(this.Products2()),
Run Code Online (Sandbox Code Playgroud)

至:

self.Products().concat(self.Products2()),
Run Code Online (Sandbox Code Playgroud)

在TotalAmount ko.computed函数内.

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

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


rab*_*rab 6

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

self.Products.push.apply( 
  self.Products, self.Products2()
);
Run Code Online (Sandbox Code Playgroud)