Pri AJAXovom načítaní formulára sa nevygeneruje obslužný JS
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- romiix.org
- Člen | 343
Zdravím,
pri
<a n:href="Menu:add $id">Pridať položku</a>
funguje všetko ako má.
namespace AdminModule\Forms;
use Nette\Application\AppForm,
Nette\Forms\Form,
Nette\Environment,
Nette\String;
class AddMenuForm extends AppForm
{
public function __construct($parent, $name)
{
parent::__construct($parent, $name);
$renderer = $this->renderer;
$renderer->wrappers['form']['container'] = \Nette\Web\Html::el('div')->id('form');
$renderer->wrappers['category']['container'] = NULL;
$articles = \Model\Article::getAll();
foreach ($articles as $article)
$article_select[$article->url] = $article->name;
$categories = \AdminModule\Model\ArticleCategory::getAll();
foreach ($categories as $category)
$category_select[$category->url] = $category->name;
$this->addGroup();
$this->addProtection('Platnosť overovacieho tokenu vypršala. Skúste to prosím znovu!');
//$this->getElementPrototype()->class('ajax');
$this->addText('name', 'Názov')
->addRule(Form::FILLED, 'Názov nie je vyplnený!');
$this->addGroup();
$this->addSelect('type', '', array('inSystem'=>'Odkaz v rámci systému','noInSystem'=>'Odkaz mimo'))
->addCondition(Form::EQUAL,array("inSystem"))->toggle("inSystem")
->addCondition(Form::EQUAL,array("noInSystem"))->toggle("noInSystem");
$this->addGroup()
->setOption('container', \Nette\Web\Html::el('div')->id('inSystem'))
->setOption('embedNext', 2);
$this->addSelect('type2', '', array('article'=>'Konkrétny článok','category'=>'Skupina článkov'))
->addCondition(Form::EQUAL,array("article"))->toggle("article")
->addCondition(Form::EQUAL,array("category"))->toggle("category");
$this->addGroup()
->setOption('container', \Nette\Web\Html::el('div')->id('article'));
$this->addSelect('article', '', $article_select);
$this->addGroup()
->setOption('container', \Nette\Web\Html::el('div')->id('category'));
$this->addSelect('category', '', $category_select);
$this->addGroup()
->setOption('container', \Nette\Web\Html::el('div')->id('noInSystem'));
$this->addText('url','')
->setEmptyValue('http://')
->addConditionOn($this['type'], ~Form::EQUAL, 'inSystem')
->addRule(Form::URL, 'Nebyla zadána platná URL');
$this->addGroup();
$this->setRenderer(new \NRomiix\MyFormRenderer);
$this->addSubmit('send', 'Ulož');
$this->onSubmit[] = array($this, 'formSubmited');
}
public function formSubmited($form)
{
...
}
}
Ak sa ale snažím zAJAXovať načítanie formulára
<a class="ajax" n:href="Menu:add $id">Pridať položku</a>
public function renderAdd($url = '')
{
if ($this->isAjax())
$this->invalidateControl('content');
}
tak sa toggle
vôbec neberie do úvahy – všetko sa naraz
zobrazí nefunguje JS.
Neviem ani kde by som mal začať hľadať chybu.
Vďaka za nakopnutie.
- loov
- Člen | 49
já teda nevím jestli máš ten formulář jako komponentu nebo jestli ho definuješ v presenteru, ale tak či tak se mi nezdá způsob definování formuláře v constructoru… snad ti při hledání tvého problému pomůže tenhle screencast
Editoval loov (7. 3. 2011 20:49)
- Filip Procházka
- Moderator | 4668
Ale vygeneruje, když se podíváš na HTML uvidíš, že tam máš nějaké data- atributy. Ty musíš udělat to, že zavoláš
<script>
Nette.initForm(document.getElementById({$form->elementPrototype->id}));
</script>
- romiix.org
- Člen | 343
Ďakujem všetkým.
Nakoniec pomohla uprava jquery.nette.js
podla https://forum.nette.org/…-js-validaci#…