form v komponentě zafunguje pouze jednou
- Dragonaut
- Člen | 33
Ahoj, mám komponentu, která má 2 signály a jeden formulář.
Pokud odešlu formulář tak vše zafunguje. Pokud ho chci odeslat podruhé tak
komponenta nereaguje.
Signály fungují vždy. Pokud ale odešlu signál tak mi přestane fungovat
formulář.
Zkrátka formulář funguje pouze pokud je submit první tlačítko na které
kliknu.
V komponentě mám následující formulářové metody
protected function createComponentFilterForm()
{
$form = new Form;
$form->onSuccess[] = $this->processFilterForm;
return $form;
}
public function processFilterForm()
{
$this->filter = $this->presenter->getParameter('filter');
if(!$this->presenter->isAjax()) {
$this->redirect('this');
} else {
$this->redrawControl();
}
}
a formulář vykresluju následovně
{snippet}
...
<tr id="filter">
{form filterForm class=>"ajax"}
{foreach $columns as $column}
<td><input type="text" name="filter[{$column}]"/></td>
{/foreach}
<td><input type="submit" name="filter" value="filter"/></td>
{/form}
</tr>
...
{/snippet}
Co dělám špatně ?
- Dragonaut
- Člen | 33
Díky.
Tak jsem to přepsal, ale chová se to pořád stejně, mám to teď následovně :
protected function createComponentFilterForm()
{
$form = new Form;
$form->onSuccess[] = $this->processFilterForm;
$sub = $form->addContainer('filter');
foreach ($this->columns as $column) {
$sub->addText($column, $column);
}
return $form;
}
public function processFilterForm(\Nette\Application\UI\Form $form)
{
$values = $form->getValues();
$this->filter = $values['filter'];
if(!$this->presenter->isAjax()) {
$this->redirect('this');
} else {
$this->redrawControl();
}
}
a v templatu
<tr id="filter">
{form filterForm class=>"ajax"}
{formContainer filter}
{foreach $columns as $column}
<td>{input $column}</td>
{/foreach}
{/formContainer}
<td><input type="submit" name="filter" value="filter"/></td>
{/form}
</tr>
Editoval Dragonaut (14. 10. 2014 13:28)
- Dragonaut
- Člen | 33
No kupodivu sem zjistil, že bez ajaxu to nefunguje vůbec :-) ikdyž se get požadavek odešle po každém kliku na submit tak se odesílají nějaké nesmysly, ale když přidam do stránky
<script>
$(function () {
$.nette.init();
});
</script>
tak se mi odešle post požadavek se správnými parametry, ale podruhé už kliknutí na submit nic neudělá.
s ajaxem se mi pošle (správné parametry)
do lGrid-filterForm-submit
filter[ActualPrice] d
filter[Description] b
filter[InventoryQuantity] c
filter[Name] a
bez ajaxu se mi getem pošle (špatně)
lGrid-columns[ActualPrice... ActualPrice
lGrid-columns[Description... Description
lGrid-columns[InventoryQu... InventoryQuantity
lGrid-columns[Name] Název
lGrid-filter[ActualPrice]
lGrid-filter[Description]
lGrid-filter[InventoryQua...
lGrid-filter[Name]
lGrid-variables[0] ID
tak nevím :P
Editoval Dragonaut (15. 10. 2014 10:08)
- Dragonaut
- Člen | 33
Tak jsem zjistil v čem je problém, když je formulář mimo tabulku tak vše funguje jak má, ale v momentě kdy ho vložím do tabulky tak nastanou popsané problémy. Na github jsem nahrál ukázkovou aplikaci, která obsahuje komponentu s tímto problémem, jak by to šlo vyřešit ?
Díky
github: https://github.com/…irstControl/
Editoval Dragonaut (15. 10. 2014 10:09)