ID einer "aktiven" Komponente, die über CHtml erzeugt wurde

Guten Morgen,

ich hätte da mal wieder eine Frage, die vor allem Extension-Schreiber durch den Kopf gehen wird/kann. Und zwar kann man ja ein aktives Textfield über CHtml erzeugen, wie das folgende Beispiel zeigt:


$textfield = CHtml::activeTextField($this->model, $this->attribute, $this->htmlOptions);

Nun ist es aber doch so, dass man nach diesem Schritt nicht auf die automatisch generierte ID zugreifen kann, da ja nur HTML-Code zurückgegeben wird und keinerlei Array (oder vergleichbares), in dem mehrere Informationen stehen.

Das mag an sich weniger das Problem sein, ABER wenn man mit JavaScript auf diese Komponente dann zugreifen will, dann kennt man deren ID ja nicht. Somit müsste es eine Möglichkeit geben aus der Komponente irgendwie die ID abzuleiten. Gibt es da schon eine Methode, oder habe ich irgendwas übersehen?

Beim Schreiben dieses Posts ist mir aufgefallen, dass man vielleicht über die htmlOptions die ID setzen kann. muss ich aber erst noch testen.

mfg

Armin

  1. Du kriegst die generierte ID mit CHtml::activeId($model,‘attribut’)

  2. Ja, man kann die ID auch mit den HTML-Optionen "erzwingen"

Das hört sich doch klasse an! Danke dir für die schnelle Antwort ;)

Für Ajax habe ich die Erfahrung gemacht, dass das von Yii verwendete Verfahren zur ID Vergabe zu Problemen führen kann.

Wenn man einen ganzen Container per ajax austauschen möchte führt die Standard ID Vergabe dazu, das Yii beim Ajax Request der ID Zaehler wieder von 0 anfängt. z.b yw0, yw1 etc. Dieser Container wird dann mit der ID yw0 wieder in die eigentliche Seite gespeist, was dazu für das yw0 2 mal im HTML Code vorhanden ist und ein weitere Request per Ajax nicht mehr funktioniert, da jQuery keine eindeutige Zuordnung treffen kann.

Um dem entgegenzuwirken kann man entweder nur den Inhalt des Containers austauschen oder aber eine andere Art der ID Vergabe wählen.

Ich persönlich finde die andere ID Vergabe besser, da ich meine Widgets sowohl im Ajax als auch im normalen Context verwenden möchte ohne die Views oder die Funktionalität daran anpassen zu müssen.

Wenn also der zweite Ajax mal nicht funktioniert, denkt an meine Worte :)