RadioList::getOption() jenom jako string

- Mikulas Dite
- Člen | 756
Ahoj, dneska jsem narazil na problém s nastavením jakéhokoliv parametru
jednomu option v RadioListu. Každá jeho metoda (teda
dvě, getControl($key) a getOption($key)) vrací html
ve stringu. Opravdu nikde není možnost získat normální objekt, který by
uměl vracet prototype?

- Majkl578
- Moderator | 1364
https://api.nette.org/…dioList.html
FormControl::getControlPrototype()
jinak RadioList::getControl() by také měl vracet Html objekt (viz API).

- Mikulas Dite
- Člen | 756
Otestoval sem to a viděl bych to na problém RadioListu:
$form->addRadioList('radio', NULL ,array('jedna', 'dva'));
foreach ($form['radio']->getControl() as $option) {
if ($option instanceof Object) {
Debug::dump(TRUE);
} else {
Debug::dump(FALSE);
}
Debug::dump($option);
}
bool(FALSE)
string(106) "<input type="radio" name="radio" id="frm-radio-0" value="0" /><label for="frm-radio-0">jedna</label><br />"
bool(FALSE)
string(104) "<input type="radio" name="radio" id="frm-radio-1" value="1" /><label for="frm-radio-1">dva</label><br />"

- Mikulas Dite
- Člen | 756
Nette neumožňuje editaci jednotlivých položek RadioListu.
Rád bych napsal nějaké řešení s Html objektem. Je tu ale zádrhel: Jak
spojit input radio a label?
- Pokud by to bylo přes nějaký další Html wrapper, například
div, itarace nagetControl()wrappery ho vracela místo radio controlů.getControl($key)by nebyl problém. - Udělat nějaký speciální objekt děděný od Html, který by defaultně control vracel a na požádání funkce z RadioList::getLabel($key) by vracel label.
- Udělat zvlášť speciální gettery pro jednotlivé controly (tzn. něco
jiného než
getControl($key)) a pro labely. Ztíží manuální render každé položky zvlášť.

- Mikulas Dite
- Člen | 756
Vytvořil jsem novou třídu RadioListItem. Stará se právě
o jednu dvojici input-label. Umožňuje RadioListu vracet přes
metody getItemControl($key) a getItemLabel($key)
jejich Html elementy a ty následně editovat. Žádný BC break nebyl potřeba,
všechny originální NetteForm testy prošly úspěšně.
Fork na:
https://github.com/Rullaf/nette
Ukázky:
$form->addRadioList('name', 'label', array('jedna', 'dva', 'tri'));
$form['radio']->getControl(1)->class = 'radioClass';
//stejné jako:
$form['radio']->getItemControl(1)->class = 'radioClass';
$form['radio']->getItemLabel(1)->class = 'labelClass';
$form->addRadioList('radio', null, array('jedna' => 'aaa', 'dva' => 'bbb', 'tri' => 'ccc'))
$form['radio']->getControl('dva')->class = 'radioClass';
//stejné jako:
$form['radio']->getItemControl('dva')->class = 'radioClass';
$form['radio']->getItemLabel('dva')->class = 'labelClass';
A místo class se dá pochopitelně využít jakýkoliv jiný
Html atribut, případně jakákoli metoda třídy Html.
Teď už se tahle feature má šanci do Nette dostat?
Editoval Mikulas Dite (9. 4. 2010 16:43)