Ich rende einige Formularelemente, wenn ein Dropdown in yii wie folgt geändert wird:
%Vor%ProfileFieldRule / showAttributes verwendet CHtml zum Rendern von Formularelementen, was zu meinem ersten Problem führt - ich muss opentag usw. verwenden und die im Formular ausgeführte Arbeit wiederholen.
%Vor%Das zweite Problem ist: Wenn es kein Änderungsereignis gibt (z. B. die Formulare, die mit Fehlern eingereicht wurden), wird der dynamische Inhalt nicht geladen.
Ich übergebe gerade ein Modell und überprüfe, ob es null ist, und mache ansonsten dasselbe Rendering wie in ProfileFieldRule / showAttributes zB:
%Vor%Es wäre ideal , wenn ich nur den obigen Code onload, onchange aufrufen könnte und trotzdem Zugriff auf das $ -Formular hätte.
Ich bin offen für alles, also, was ist die beste (oder eine gute) Lösung zum Anzeigen und dauerhaften dynamischen Inhalt wie oben beschrieben?
Vielen Dank im Voraus für einen Rat.
Hier ist ein Bild von dem, was passiert Ссылка Hinweis, die gerenderten Elemente zeigen keine Ajax-Validierung (Hervorhebung in Rot / Grün), weil ich schlecht mit Ajax bin und immer noch
findeIch sollte beachten, dass eine andere Lösung, die ich in Betracht gezogen habe, ist, showAttributes loszuwerden, weiterhin zwei Modelle an das Formular zu übergeben und einfach die create-Aktion bei Änderung erneut aufzurufen. Dies wird jedoch die vorherige Ajax-Validierung los, wenn das Dropdown-Menü geändert wird, da das gesamte Formular neu gezeichnet wird.
Ich hatte dieses Problem vorher auch.
Das Problem liegt in der .bind ('change'), Sie sollten stattdessen .live ('change') verwenden, In jQuery 1.7 wird dies mithilfe der Funktion .on () gelöst, die sowohl Live- als auch normale Bindungen ausführt. Unvergesslich Yii hat nicht die neueste jQuery. Bei einigen Projekten habe ich jQuery manuell aktualisiert, aber in der Mitte bleiben, müssen Sie Basisklassen erweitern, um jQuery-Fehler zu beheben, die Sie bekommen. Für eine direktere und einmalige Lösung könnten Sie ein bisschen js schreiben, das Ihre Ereignisse auf den Elementen aufhebt und sie dann mit der .live () - Funktion bindet. Aber es ist alles ein bisschen hacky, gelinde gesagt.