Я провел несколько часов дополнительных исследований, но я все еще не могу найти хороший образец того, что, по моему мнению, является общей проблемой.Manageing jQuery custom events
Я работаю над приложением .Net MVC2. Наше приложение состоит из главной страницы, затем несколько частичных просмотров (включено страницы) каждый из окон открываются частичного вид соответствует виджету, состоящему из HTML структуры и JS-JQuery кишок
Некоторые из наших виджеты имеют богатые взаимодействия друг с другом так, конечно, мы используем событие в JQuery в связывающем что-то к эффекту этого:
Сводка данных Widget
$(document).bind("DataUpdated", summaryobject.updateTotals());
манипулирования данных Widget
$(document).trigger("DataUpdated");
Проблема, с которой мы сталкиваемся, заключается в том, что, когда пользователь переходит к частям приложений, эти виджеты (HTML/DOM) удаляются со страницы и заменяются новым набором частичных представлений. Когда пользователь перемещается назад, HTML (визуальное представление) перезагружается вместе с привязкой jQuery, которая создает двойное связывание.
До сих пор мои решения казались мне хромыми.
(1) связываются с DOM объект привязки для:
$("#summaryobject").bind("DataUpdated", summaryobject.updateTotals());
Проблема с этим состоит в том, что тогда мой запуск виджет должен знать, что DOM ▪ Таблица для запуска на: $("#summaryobject")
, какой вид поражения цель.
(2) Создайте объект EventBus для обработки, который связывает события и позволяет событиям связываться только один раз. Проблема, с которой я сталкиваюсь, заключается в сохранении/привязке событий, которые я не могу отслеживать, кто их создал, поэтому я не могу отменить регистрацию, если мне нужно .... возможно, незарегистрированные события не являются необходимыми событиями.
Какие шаблоны используются другими пользователями для управления настраиваемыми событиями?
Значит, это в основном использует только привязку jQuery для вызова диспетчера событий? Сам менеджер событий является более сложной версией встроенного привязки событий jQuery? Я еще не совсем понял способ огня, но я думаю, что знаю, что он делает. –
@Chris - опция # 2 фактически полностью независима от любой библиотеки javascript. Он создает центральный реестр событий и позволяет всем, что знает об этом, добавлять «слушателей» к событиям. Всякий раз, когда вызывается 'fire', он проверяет, содержит ли реестр (' EventManager.events') ключ от ожидаемого имени.Если это так, то выполняется над массивом и вызывает каждую из функций в массиве событий. –
О, я сейчас вижу это более четко. Я действительно не вижу, как это решает проблему двойного связывания. Это просто воссоздает JQuery eventbus. jQuery предоставляет эту же функциональность с помощью bind/unbind. Я также не вижу преимущества живых для пользовательских привязок. Я вижу преимущество, но не тот, кто решает эту проблему. Я думаю, что моя проблема - это действительно общий дизайн работы приложения. Нам нужно быть умнее, как мы загружаем наши объекты JS и выполняем наши привязки. У меня есть временное решение для этого, но нам нужно будет сделать большой рефакторинг, чтобы сделать все правильно. Я подумаю об этом, но –