3

Knockout.js で Repository-Pattern を実装しようとして行き詰まりました。次の理由により、クリックイベントを処理するのが難しいと思います。

問題:

  1. クリック時: pendDeleteItem は呼び出されません。スコープが見つかりません;(
  2. PendDeleteItem には、この問題があります。PendingItem プロパティにアクセスする必要があります。

作業フィドル: http://jsfiddle.net/ThomasDeutsch/j7Qxh/8/

目標:

クリックすると、アイテムが PendingItem に送信されます。

制限: 可能であれば ko.applyBindings(ViewModel) を保持したいです。これは、さらにリポジトリを追加し、html でデータバインドを定義したいからです: customer.pendDeleteItem

4

2 に答える 2

2

問題の最初の部分は単純です。ボタンのマークアップを見てください。

<button data-bind"click: $root.customer.pendDeleteItem "> sendTo -> PendingItems</button>

属性名の=後にがありません。data-bindこれを次のように変更します。

<button data-bind="click: $root.customer.pendDeleteItem "> sendTo -> PendingItems</button>

次の問題はthis、クリック ハンドラーでビュー モデルではなく「項目」を参照することです。次の行を変更する必要があります。

this.PendingItems.push(item);
this.Items.remove(item);

ビューモデルを参照するには:

ViewModel.customer.PendingItems.push(item);
ViewModel.customer.Items.remove(item);

これが更新された fiddleです。

于 2012-06-07T08:51:25.467 に答える
1

2 番目の問題について: この Binding はそれを解決します。

data-bind="click: function() { $root.customer.pendDeleteItem($data)}

これは、「this」でこれを参照できる対応するjsです:)

pendDeleteItem = function(item) {
        console.log("pendDeleteItem called");
        item.Operation = 'DELETE';
        this.PendingItems.push(item);
        this.Items.remove(item);
    };
于 2012-06-07T09:31:14.783 に答える