2012-10-24 3 views
16

私が理解しているように、バインディングの中で$indexが利用可能であり、オブジェクトのインデックスを与えています...私はclick:というバインディングを持っています。 click:foo$indexfooにアクセスする必要があります。

方法はありますか?むしろ、あなたの結合の中に関数を使用してその周りをハッキングより

答えて

9

はい、

<input type="button" data-bind="click: function(data, event) { myClickHandler($index, data, event); }"/> 
+0

これは悲しいですが真です。 – jessegavin

+0

クリックやぼかしなどのデフォルトのハンドラは、データやイベントだけでなく、より多くの情報を渡す必要があります。上記の速いチートが解決策にうまく収まらない場合は、私はカスタムバインディングを使用します。 – ethermal

36

、あなただけのバインディングコンテキストを取得する必要があります。バインディングに関連付けられたDOM要素にアクセスできる限り、ko.contextFor()関数を使用してバインディングコンテキストとそのすべてのプロパティを取得できます。

ハンドラで取得するイベントオブジェクトでは、targetプロパティを使用してノードにアクセスできます。それを使用してコンテキストを取得します。

var viewModel = { 
    foo: function (data, event) { 
     var context = ko.contextFor(event.target); 
     // do stuff with context.$index() 
    } 
}; 
+3

'$ index'はオブザーバブルなので、オブザーバブルはノックアウトの関数であるので、' $ index() 'はカッコで囲む必要がありました。http://goo.gl/TIGYV1 – andrewcockerham

関連する問題