Strom checkboxů načítaný pomocí AJAXu
- Michal Schneider
- Člen | 13
Ahoj,
ve formuláři potřebuji použít rozsáhlou stromovou strukturu s checkboxy, kterou načítám pomocí AJAXu. U komponenty není problém, zavolám si handleLoad s id rodiče a ajaxově zapracuji do stromu, ale u formuláře si nevím moc rady :-( Jakým způsobem toto řešit u komponenty formuláře, která je zděděna z Nette\Forms\Container a postupně si přidává checkboxy podle toho, jak uživatel rozbaluje větvě stromu?
- llook
- Člen | 407
Použij Filipův Replikátor, to je něco jako Multiplier pro formuláře: https://componette.org/search/?…
- Michal Schneider
- Člen | 13
Ahoj,
moc díky, na ten jsem přesně koukal, akorát mám problém s tím, že nové komponenty formuláře vytvořené přes replikátor jsou vytvářené pomocí odeslání formuláře. Což by se dalo asi udělat tak, že by se tlačítko pro odeslání formuláře skrylo a odesílalo by se na základě nějaké události JavaScriptu… Nicméně, lze nějakým způsobem ošetřit odeslání formuláře s vypnutou validací? Ve chvíli, kdy rozbalím nějakou část podstromu, nemusím mít ještě zaškrtnutou žádnou položku.
Ještě jednou moc díky.
llook napsal(a):
Použij Filipův Replikátor, to je něco jako Multiplier pro formuláře: https://componette.org/search/?…
- llook
- Člen | 407
Odesílání formuláře není nezbytné. Replikátor se dá použít i takto:
use Nette\Forms\Container;
use Kdyby\Replicator\Container as ReplicatorContainer;
$form['containerName'] = new ReplicatorContainer(function (Container $container)
{
$container->addCheckbox('fieldName');
});
Když potom jakkoli dostaneš do formuláře
<input type="checkbox" name="containerName[index][fieldName]"/>
a uživatel ho zaškrtne, tak po zpracování dostaneš něco takového:
[
'containerName' => [
'index' => [
'fieldName' => true,
],
],
]
Jednou jsem takhle vytvářel ad-hoc inputy v šablonách, nějak jako
{input containerName-something-text}
. Podobně, jako se vytváří
controly přes Multiplier.
Editoval llook (17. 12. 2013 0:20)
- Michal Schneider
- Člen | 13
Ahoj llooku,
tak takhle nějak to mám udělané teď. Mám komponenty, která se načítá ajaxově a pokud jako parametr komponenty uvedu id formuláře, tak jsem schopný v komponentě generovat checkboxy, které může uživatel zaškrtávat. Zároveň lze z komponenty získat kompletní seznam (pole) listů stromu, který projdu a přidám do formuláře.
Tohle mi funguje, nicméně se mi to moc nelíbí :-)
Představoval bych si něco jako:
<?php
$form->addCheckboxTree("tree", "Strom", $tree)->setLazy(TRUE);
?>
kde $tree je datová struktura stromu. V CheckboxTree formulářovém kontrolu by se pak řešilo vše další včetně ajaxového načitání chechboxů ;-)
No zatím se asi spokojím s řešením, co mám výše a budu o tom přemýšlet ;-)
Ještě jednou díky moc!
llook napsal(a):
Odesílání formuláře není nezbytné. Replikátor se dá použít i takto:
use Nette\Forms\Container; use Kdyby\Replicator\Container as ReplicatorContainer; $form['containerName'] = new ReplicatorContainer(function (Container $container) { $container->addCheckbox('fieldName'); });
Když potom jakkoli dostaneš do formuláře
<input type="checkbox" name="containerName[index][fieldName]"/>
a uživatel ho zaškrtne, tak po zpracování dostaneš něco takového:[ 'containerName' => [ 'index' => [ 'fieldName' => true, ], ], ]
Jednou jsem takhle vytvářel ad-hoc inputy v šablonách, nějak jako
{input containerName-something-text}
. Podobně, jako se vytváří controly přes Multiplier.