0

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)
});

しかし、それが本当に唯一の方法ですか?デリゲートに関連するデータ属性について言及しているチュートリアルはあまりないので心配です。何かが足りないのか、何か間違っているのか疑問に思っています。

編集:羊の服の代表であるにもかかわらず、「オン」が新しい黒であることを反映するように編集されました。

4

1 に答える 1

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のバージョンがわからないため、使用しています。

于 2013-02-27T16:28:55.947 に答える