5

私が持っているとしましょう

<button type="button" data-bind="click: actions.remove">×</button>

とハンドラー

var actions = {
    remove: function(item) {
        ?array?.remove(item); // ?array? is a containing array, accessed somehow
    }
}

どのバインディングでも?array?同じものを使用できるようにするにはどうすればよいですか?buttonforeach

明確化:ビューモデル
に入れると、その方法を知っています。removeただし、ビューモデルには階層配列が含まれているため、適切な場所でメソッドを取得するためだけにすべてを調べたくはありません。ビューモデルも、の助けを借りてサーバーから時々更新されますがko.mapping、それは新しいデータにメソッドを追加しません。そのため、ハンドラーを個別に実装しました。

4

2 に答える 2

3

このようなことを試してみてください。

<div data-bind="foreach: someArray">
    <button type="button" data-bind="click: $parent.actions.remove">x</button>
</div>


//Inside your viewmodel.
var self = this;
self.someArray = ko.observableArray();
self.actions = {
remove: function() {
    self.someArray.remove(this); // ?array? is a containing array, accessed somehow
}
}

編集:申し訳ありませんが、あなたの意味を読み違えました。このようなことを試して、任意の foreach バインディングで機能させることができます。

<div data-bind="foreach: someArray">
    <button type="button" data-bind="click: function() {$parent.actions.remove($parent.someArray(), $data}">x</button>
</div>


//Inside your viewmodel.
var self = this;
self.someArray = ko.observableArray();
self.actions = {
remove: function(arr, item) {
    arr.remove(item); // ?array? is a containing array, accessed somehow
}
}
于 2012-12-27T21:23:13.903 に答える
0

現時点では不可能です。

そのための新しいノックアウト問題を提起しました(現在開いています):
バインディングコンテキストを介した現在の配列へのアクセスを許可します

関連: foreach での $last のサポート

于 2013-01-22T07:37:40.697 に答える