你如何传递语义数据做一个jQuery委托?

时间:2013-02-27 16:17:17

标签: javascript jquery

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”是新的黑色,尽管是穿着羊皮的代表。

1 个答案:

答案 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版本。