2

ノックアウト.jsから始めたばかりですが、2つの異なるscomputedに基づいてメソッドを作成しようとすると、すでにいくつかの問題が発生していますobservableArray

knockout.js の Web サイトのドキュメントを使用して、次のビューモデルを作成しました。

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または、配列ごとに 1 つずつ、2 つの異なる呼び出しを行う必要がありますか?

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 に答える