Vykreslení formulářového prvku (submit) s OnClick callbackem
- Dalibor
- Člen | 26
Ahoj, jak vykreslujete formulářové prvky (submit inputy) s callbackem?
<?php
$form->addSubmit('name', 'popis')
->onClick[] = function(SubmitButton $button) {
dump($button);
};
?>
v šabloně: {$form[‚name‘]->control}
a Nette (resp. PHP) hlásí: Object of class Closure could not be converted to string
Díky, Dalibor
- Filip Procházka
- Moderator | 4668
{$form['name']->control}
Ukaž celou laděnku. Něco takového by nemělo nastat.
- Dalibor
- Člen | 26
Já jsem to zjednodušil.. jde o komponentu, mrkněte sami..:
<?php
public function createComponentEditForm(){
$form = new Form();
$form->setTranslator($this->translator);
if ($this->products) {
foreach ($this->products as $product) {
$form->addSubmit('activeX'.$product->getId(), $product->getActive()?'Ano':'Ne')
->getControlPrototype()->class($product->getActive()?'greenbtn':'redbtn')
->onClick[] = function(SubmitButton $button) {
$values = $button->form->values;
dump($button);
};
}
}
return $form;
}
?>
jo a to activeX nemá s activeX nic společného, X používám jako oddělovač pro jiné případy než je tady.. takhle se to sešlo ;)
Editoval Dalibor (19. 8. 2011 15:04)
- Filip Procházka
- Moderator | 4668
Nojo… to v tom máš guláš :) Správně je to takto:
public function createComponentEditForm()
{
$form = new Form();
$form->setTranslator($this->translator);
$active = $form->addContainer('active');
foreach ($this->products as $product) {
$submit = $active->addSubmit($product->getId(), $product->getActive() ? 'Ano' : 'Ne');
$submit->getControlPrototype()
->class($product->getActive()?'greenbtn':'redbtn');
$submit->onClick[] = function(SubmitButton $button) {
$values = $button->form->values; dump($button);
};
}
return $form;
}
Všimni si jak jsem ti rozdělil ty tlačítka, aby jsi nemusel v šabloně
hackovat hnusně ten název a taky si všimni, že když zavoláš
->getControlPrototype
, voláš pak metody nad objektem
Html
, né SubmitButton
. Takže se to pak snaží
vykreslovat i s tou closurou, což nejde.
Editoval HosipLan (19. 8. 2011 15:17)
- Dalibor
- Člen | 26
HosipLan napsal(a):
Nojo… to v tom máš guláš :) Správně je to takto:
>
Všimni si jak jsem ti rozdělil ty tlačítka, aby jsi nemusel v šabloně hackovat hnusně ten název a taky si všimni, že když zavoláš
->getControlPrototype
, voláš pak metody nad objektemHtml
, néSubmitButton
. Takže se to pak snaží vykreslovat i s tou closurou, což nejde.
Díky, mrknu na ten Container – tohle jsem zatím nepoužíval, ale zdá se, že to řeší problém s identifikací tlačítek podle ID ;-)