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
+
0
-

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
+
0
-

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
+
0
-

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>
cuga
Člen | 210
+
0
-

hoj,

tohle se resilo tady: https://forum.nette.org/…-js-validaci

romiix.org
Člen | 343
+
0
-

Ďakujem všetkým.

Nakoniec pomohla uprava jquery.nette.js podla https://forum.nette.org/…-js-validaci#…