jQuery中的委托/“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)
});
但这真的是唯一的方法吗?我很担心,因为没有多少教程提到与代表相关的数据属性,所以我想知道我是否遗漏了某些东西或做错了什么。
编辑:编辑反映“on”是新的黑色,尽管是穿着羊皮的代表。
答案 0 :(得分:1)
您似乎并不需要委派,因为您似乎为这些元素设置了数据属性。
只需使用下面的.click
数据参数,
// 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).click({'widgetId', widgetId}, myFunction);
}
//later in code
function myFunction(e) {
var widgetId = e.data.widgetId;
//your code
}
注意:我正在使用.click
,因为我不确定您使用的jQuery版本。