Как совместить изменение заголовка диалогового окна jQuery UI и открытие в одном вызове функции


У меня есть случай, когда мне нужно обновить заголовок пользовательского интерфейса jQuery диалог с номером детали при двойном щелчке по ячейке таблицы. Название будет получено из самого значения ячейки таблицы.

Этот фрагмент (ниже) из фактического кода работает, но он просто не работает. мне кажется правильным, так как я должен вызвать функцию диалога дважды: (1) чтобы изменить заголовок, и (2) откройте диалоговое окно.

Есть ли лучший способ объединить обе операции с одним вызовом к .dialog ()?

JS сниппет

// Dialog declaration
var my_dlg = $('<div id="my-dlg">')
  .html(
    '<span class="part">FOO BAR</span>'
  )
  .dialog({
    autoOpen: false,
    title: 'Default Title',
    modal: true
  });

// Event handler
$('td.part').live('dblclick', function(){
  $(my_dlg)
    .dialog('option','title', $(this).text())
    .dialog('open');
});

HTML-фрагмент

<table>
<tr><td class="part">AB123456</td></tr>
<tr><td class="part">GX443459</td></tr>
<tr><td class="part">SK555455</td></tr>
</table>
2 3

2 ответа:

Это правильный / единственный способ сделать это, поскольку у вас есть 2 события, само открытие диалога и щелчок ячейки таблицы. Это также правильный способ изменить любой параметр в диалоговом окне пользовательского интерфейса jQuery после его создания.

Единственная ненужная вещь, которую вы сделали, застряла my_dlg в $() во второй раз, когда вы используете его, что не обязательно, так как это уже объект jQuery.

Это стандартный способ вызова методов виджета. Все методы, предоставляемые данным виджетом (dialog в вашем случае), объединяются в $.fn под именем виджета, чтобы их можно было применить к объектам jQuery.

Однако, если вы хотите избежать повторных вызовов dialog(), Вы можете получить ссылку на экземпляр виджета и вызвать его методы напрямую:

my_dlg.data("dialog").option("title", $(this).text()).open();