Я создаю эту инфраструктуру мини-модуля, и я пытаюсь повторно использовать определение модуля на динамически загружаемом HTML. это похоже на использование одного и того же сценария виджета погоды для управления двумя или более погодными виджетами на экране, одним загруженным на загрузку страницы и другими, загруженными позже. определение модуля использует этот формат.Выполнять скрипт только для недавно добавленного HTML
framework.module.create('module_name',function(){
//execute when starting the module
this.init = function(){
//for example, bind a click handler
$('button').on('click',function(){
alert('foo');
});
}
});
имя модуля и конструктор хранится в массиве и во время загрузки страницы, выполненные как
//store
function create(name,fn){
modules[name] = fn;
}
//execute
function start(){
//for each module definition stored
var module = new modules[name]();
module.init();
}
Теперь обработчики событий связаны с элементами. это работает, когда модуль html уже находится на странице. однако, если я попробую загрузить другую копию HTML-кода этого модуля, которая еще не имеет обработчиков, вызов start()
связывает его с обработчиками, но теперь удваивает обработчик существующего/уже инициализированного HTML. нажатие кнопки на предварительно загруженном HTML теперь вызывает события щелчка дважды.
Я не могу сделать эту магию в определении модуля. Мне нужно сохранить формат «конструктор/обратный вызов». Кроме того, я не хочу, чтобы пользователи делали обходные пути для этого. это должно быть сделано в рамках кода.
Как выполнить скрипт модуля только для вновь добавленного, точно идентичного HTML?
или
Как предотвратить сценарий от влияния на уже инициализирована HTML?
ли начать принимать параметр, и если это нуль, то делать все, должно решить вашу проблему. –