Ich erstelle dieses Mini-Modul-Framework und versuche eine Moduldefinition in einem dynamisch geladenen HTML wiederzuverwenden. Es ist, als würde man das gleiche Wetter-Widget-Skript verwenden, um zwei oder mehr Wetter-Widgets auf dem Bildschirm zu steuern, eines, das beim Laden der Seite geladen wird, und die anderen, die später geladen werden. Das Definieren des Moduls verwendet dieses Format.Skript nur für neu hinzugefügten HTML ausführen
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');
});
}
});
der Modulname und Konstruktor wird in einem Array und während der Seitenlast, wie
ausgeführt gespeicherten//store
function create(name,fn){
modules[name] = fn;
}
//execute
function start(){
//for each module definition stored
var module = new modules[name]();
module.init();
}
nun Event-Handler auf die Elemente gebunden sind. Das funktioniert, wenn das Modul html bereits auf der Seite ist. Wenn ich jedoch versuche, eine weitere Kopie des HTML-Codes dieses Moduls zu laden, die noch keine Handler hat, ruft der Aufruf start()
die Handler auf, aber jetzt verdoppelt sich der Handler für den vorhandenen/bereits initialisierten HTML-Code. Wenn Sie auf die Schaltfläche im vorinstallierten HTML klicken, werden Klickereignisse zweimal ausgelöst.
Ich kann diese Magie auf die Moduldefinition nicht tun. Ich muss das Format "Konstruktor/Callback-Funktion" beibehalten. Außerdem möchte ich nicht, dass Benutzer Workarounds dafür tun. Dies muss unter dem Rahmen-Code erfolgen.
Wie führe ich das Modulskript nur für den neu hinzugefügten, exakt identischen HTML aus?
oder
Wie verhindere ich das Skript aus dem bereits initialisiert HTML zu beeinflussen?
starten Haben Sie einen Parameter übernehmen, und wenn das null dann alles tun, sollte Ihr Problem lösen. –