Das bringt mich immer. Nachdem ich alle schönen UI-Elemente auf einer Webseite initialisiert habe, lade ich einige Inhalte ein (zum Beispiel in ein Modal oder Tabs) und der neu geladene Inhalt hat nicht die UI-Elemente initialisiert. zB:Welches ist das bevorzugte Muster zum erneuten Binden von jQuery-artigen UI-Schnittstellen nach dem Laden von AJAX?
$('a.button').button(); // jquery ui button as an example
$('select').chosen(); // chosen ui as another example
$('#content').load('/uri'); // content is not styled :(
Mein aktueller Ansatz ist es, eine Registrierung von Elementen zu erstellen, die Bindung muß:
var uiRegistry = {
registry: [],
push: function (func) { this.registry.push(func) },
apply: function (scope) {
$.each(uiRegistry.registry, function (i, func) {
func(scope);
});
}
};
uiRegistry.push(function (scope) {
$('a.button', scope).button();
$('select', scope).chosen();
});
uiRegistry.apply('body'); // content gets styled as per usual
$('#content').load('/uri', function() {
uiRegistry.apply($(this)); // content gets styled :)
});
ich nicht die einzige Person mit diesem Problem sein kann, so gibt es keine besseren Muster um das zu tun?
Ihre Methode sieht zumindest besser aus als die meisten, sie zielt nur auf neue Elemente, was gut ist. Ich hätte nicht "apply" als Namen der Eigenschaft verwendet, aber das könnte verwirrend sein. –
Einverstanden, deine ist eine gute Methode. Das ist so ziemlich das, was jQuery Mobile macht, wenn das 'create' -Ereignis für ein Container-Element ausgelöst wird, außer dass es' data -'-Attribute anstelle von Klassen verwendet, um die Elemente zu vergleichen und die Widgets zu bestimmen, die verwendet werden, um sie zu erweitern. –
Danke. Ich werde den jQuery Mobile-Code ausprobieren, um zu sehen, ob sie dort etwas Interessantes tun. – stephenfrank