Какова наилучшая практика для представления модального представления и привязки к нему событий? - PullRequest
0 голосов
/ 30 октября 2011

В очень распространенном сценарии у меня есть HTML-страница с кнопкой «Добавить», которая открывает модальное диалоговое окно (через Facebox) и просит пользователя выбрать элемент из списка, который появляется в нем. Модальное диалоговое окно получает свой HTML-фрагмент с сервера асинхронно. Я хочу, чтобы этот фрагмент можно было повторно использовать во многих частях моего приложения, поэтому он не должен предполагать, что я использую Facebox для его загрузки. Единственное, что он должен сделать, это вызвать событие item-selected всякий раз, когда пользователь выбирает элемент в нем. Но так как фрагмент загружается асинхронно, я не могу использовать $(document).ready. То есть я не могу вызвать событие как это:

$(document).ready(function() {
  $(".item").click(function() {
    $(".items-modal-dialog").trigger("item-selected", this);
  });
});

Кроме того, мне не очень нравится использовать класс items-modal-dialog для идентификации включающего элемента DOM.

Я придумал несколько решений для этого, и я хотел бы знать, есть ли какой-то превосходный образец, который я пропускаю, потому что я думаю, что это очень распространенная проблема.

  1. Поместите скрипт после всего HTML, так что я уверен, что загружен DOM сниппета (я думаю, что это плохая практика)
  2. Создание функции JavaScript, которая загружает фрагмент с Facebox и затем связывает события. Таким образом, я предполагаю, что я использую Facebox, а также должен создать функцию для каждого типа модального диалога, который я создаю. Единственная положительная сторона, которую я вижу в этом, - это то, что я могу программно создать items-modal-dialog DIV, поэтому мне не нужно использовать класс для его идентификации.
  3. Использование jQuery live для привязки событий.
  4. Использование iframe и $(document).ready.

Будем весьма благодарны за любые предложения.

1 Ответ

1 голос
/ 30 октября 2011

Лучше всего на мой взгляд было бы использовать функцию live или делегата jQuery.

...