Select vraci NULL pokud je ponechana default hodnota
- musa
- Člen | 28
Ahoj, ve formulari mam select, ktery, pokud nezmenim jeho hodnotu, nevrati defaultni (podle ktere se ale v poradku nastavi), ale NULL. Pokud pole vymenim za napr. text tak je vse v poradku a vraci default hodnotu i pokud pole nezmenim. Netusite kde muze byt problem? (PHP 5.2.10, Nette 0.9.1)
- musa
- Člen | 28
v tovarnicce createComponentServerForm():
if ($user->isAuthenticated()) {
$disks = disks::getAvailableForVm($this->defaults['id'])->fetchPairs('id', 'name');
$form->addSelect('disk2_id', 'Select disk', $disks)
->getControlPrototype()
->class('disk2_existing_group')
->onChange = 'setValuesDisk(\'disk2\'); updatePrice();';
}
v sablone pak:
{if $user->isAuthenticated()}
<li class='disk1_existing_group'>
{!$form['disk1_id']->label}
{!$form['disk1_id']->control}
</li>
{/if}
Editoval musa (7. 10. 2009 10:50)
- Honza Marek
- Člen | 1664
Co mě napadá je, že po odeslání formuláře nějak není k dispozici to
$this->defaults['id']
.
Formulář se totiž po submitu znova sestaví a u selectu se kontroluje, jestli přijatá hodnota je jedna z těch, které jsi do něj nastavil.
- Klokan
- Člen | 47
Nevím, jestli to nemůže nějak souviset, ale v DataGridu od Romana Sklenáře mi po stažení Nette 0.9.1 přestala fungovat změna počtu položek na stránce, která je taktéž umístěná v selectu. Nemáte s tím někdo stejný problém ? (rev 51.)
Omluva, problém je již nahlášený tady
Editoval Klokan (7. 10. 2009 13:23)
- musa
- Člen | 28
Honzo diky, problem je v tom $this->defaults[‚id‘]. Pravdepodobne spatne pracuju s nastavenim defaults. Aby byl v pripade noveho serveru formular predvyplnen, mam v atributu $defaults ulozeny defaultni $defaults :), ktere nastavuju v render(). Pro editaci ma pak presenter, ktery ServerFormControl pouziva k dispozici metodu initDefaules(), kterou nastavuje editovany server.
class ServerFormControl extends BaseControl (BaseControl je potomek Control)
{
private $defaults = array(
'id' => '',
...
);
public function initDefaults($values) {
$this->defaults = $values;
}
/** views *******************************************************************/
public function render()
{
$template = $this->createTemplate();
$template->setFile(dirname(__FILE__) . '/ServerFormControl.phtml');
$template->form = $this['serverForm'];
$template->form->setDefaults($this->defaults);
...
}
a v presenteru:
public function createComponentServerForm()
{
$form = new ServerFormControl;
if ($this->getParam('name') != NULL) {
$server = servers::getByName($this->getParam('name'));
$form->initDefaults($server);
}
return $form;
}
Ten presenter pak pri submitu uz nema onen parametr ‚name‘ takze neprenastavi defaultni $defaults a problem je na svete. Jaky je tedy obecne platny zpusob jak naklad s defaults aby to po submitu „fungovalo“?
Editoval musa (7. 10. 2009 10:50)
- musa
- Člen | 28
Tak problem byl v chybejicim persistentnim parametru pro ten presenter. Prave to ‚name‘, kdyz sem dal zpet (uz sem ho tak mel, ale pri nejakem zatmeni mi tam prisel zbytecny a v ramci cisteni kodu sem ho zrusil) a ted se znovu spravne v tom submit pozadavku posila. Bez nej se pouze poslalo /do=serverForm-submit a presenter ho uz pak nemel pro znovusestaveni. Nyni uz se zas posial /name=neco&do=serverForm-submit.
- Honza Marek
- Člen | 1664
Ok, jinak pro přehlednost příspěvků ve fóru doporučuju nastudovat https://forum.nette.org/…v-tomto-foru#…