jQueryのDelegation/"on"は、新しい注目点のようです。そして、デリゲート関数がイベントオブジェクトを受け取ることを完全に理解しています。
しかし、私の質問は、セマンティック/アプリケーションデータをデリゲートに渡すにはどうすればよいですか?
古い方法、委任なし:
// bind a new closure for each button
for (var i = 0; i < MyApp.Widgets.length; i++) {
var widgetId = MyApp.Widgets[i];
$('#myapp-widget-button-' + i).click(
function () {
MyApp.upgradeWidgetById(widgetId);
}
);
}
委任(およびパーツが欠落している)を使用した新しい方法:
// refactor custom closures into one delegate
$('#myapp-widget-container').delegate('.myapp-widget-button', 'click', function () {
// MyApp.upgradeWidgetById( ... )
});
どこwidgetId
から来たの?これがデータ属性の出番だと感じています。
委任とデータ属性を使用した新しい方法
// attach application data to the handled objects
for (var i = 0; i < MyApp.Widgets.length; i++) {
var widgetId = MyApp.Widgets[i];
$('#myapp-widget-button-' + i).data('widgetId', widgetId);
}
// refactor custom closures into one delegate
$('#myapp-widget-container').delegate('.myapp-widget-button', 'click', function () {
var widgetId = $(this).data('widgetId');
MyApp.upgradeWidgetById(widgetId)
});
しかし、それが本当に唯一の方法ですか?デリゲートに関連するデータ属性について言及しているチュートリアルはあまりないので心配です。何かが足りないのか、何か間違っているのか疑問に思っています。
編集:羊の服の代表であるにもかかわらず、「オン」が新しい黒であることを反映するように編集されました。