Formular v komponente – nefunguje callback

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
krucinal
Člen | 38
+
0
-

Ahoj, nekde nejspis delam chybu a netusim kde. Mam nejakou komponentu a v ni formular. Na formulari mam nastavene onSuccess[] = callback($this, ‚nejakaMetoda‘); ale ta se pri odeslani formulare vubec nezavola (zkousel jsem i onSubmit[] abych vyloucil problemy s validaci, ale vysledek stejny.
V template formular vykresluji {$filterForm}

V jine komponente mi obdobnym zpusobem formular funguje.

Otazka zni, co vse je ke spravnemu fungovani callbacku v komponente potreba a jak mam postupovat pri hledani chyby?

V kostce to mam nejak takto:

use Nette\Application\UI;
use Nette\Application\UI\Form;

class Datalist extends UI\Control
{
	/** @var \Nette\Application\UI\Form $filterForm */
	private $filterForm;

	public function __construct(BasePresenter $parent, $name)
	{
		parent::__construct($parent, $name);

		$this->filterForm = new Form($this,'datalistFilter');
		...
		$this->filterForm->addSubmit('submit', 'Hledat');
		$this->filterForm->onSuccess[] = callback($this, 'filterSubmitted');
	}

	public function filterSubmitted($form)
	{
	    // nejaky kod
	}

	public function render()
	{
		...
	        $this->template->filterForm = $this->filterForm;
        	...
	}

}

Editoval krucinal (7. 3. 2012 15:34)

hAssassin
Člen | 293
+
0
-

jen dotaz, ktery s tim asi moc nesouvisi, ale proc ten form vytvaris v konstruktoru ty komponenty a ne v tovarnicce?

boky
Člen | 18
+
0
-

Ukaz jak to volas v presenteru… tam bude zakopanej prase

krucinal
Člen | 38
+
0
-

Noo, v presenteru mam napr. toto:

protected function createComponentDatalist($name)
{
    return new Datalist\Users($this, $name);
}

… z template volam pomoci {control Datalist} vraci to instanci tridy ve ktere je napr. toto:

<?php

namespace Datalist;

class Users extends \Datalist
{
    public function __construct(\BasePresenter $parent = NULL, $name = NULL)
    {
        parent::__construct($parent, $name);
	...
    }
}

.. coz je model cehosi a rozsiruje tridu komponenty kterou jsem uvedl na zacatku.

Kdyz to tak pozoruju, tak jediny rozdil oproti komponente kde mi formularove callbacky funguji je v tom, ze tady neinstancuju komponentu primo z presenteru, ale instancuju tridu ktera komponentu rozsiruje. To by ale snad nemel byt nejaky problem. Nebo jo?

Jan Endel
Člen | 1016
+
0
-

a v Datalist\Datalist volas parent::__construct()?

krucinal
Člen | 38
+
0
-

Jestli mas na mysli \Datalist\Users tak ano. Vzhledem k tomu ze je to konstruktor a prekryva konstruktor rodicovske tridy \Datalist, tak by to bez toho neslo. Do komponenty tak predavam objekt presenteru a $name (ktere pak strkam dal do UI\Control). Bez toho se mi komponenta nepripoji k presenteru.

Ot@s
Backer | 476
+
0
-

Formulář není připojen k presenteru. Nemáš v \Datalist\Users nějaký attached? Zkontroluj si URL po submitu onoho formuláře, jaká je tam hodnota signálu (hodnota parametru do). Odpovídá hierarchii volaných komponent?

Jan Endel
Člen | 1016
+
0
-

a v rodicovske \Datalist ten konstruktor posilas do parenta ?

krucinal
Člen | 38
+
0
-

Ot@s napsal(a):

Formulář není připojen k presenteru. Nemáš v \Datalist\Users nějaký attached? Zkontroluj si URL po submitu onoho formuláře, jaká je tam hodnota signálu (hodnota parametru do). Odpovídá hierarchii volaných komponent?

Nevim co myslis pod pojmem attached.
Po odeslani formu mam v url ?do=datalist-filterForm-submit … imho v poradku. Na presenter je napojena komponenta Datalist, na nej pak formular filterForm. S nazvy v signalu to sedi – tedy az na male d v datalist.

krucinal
Člen | 38
+
0
-

pilec napsal(a):

a v rodicovske \Datalist ten konstruktor posilas do parenta ?

Jojo, to je videt uplne nahore.

krucinal
Člen | 38
+
0
-

Tak me napada, netusite kde v kodu nette se vola ten callback? Ze bych si tam dal breakpoint a zkusil to odkrokovat.

krucinal
Člen | 38
+
0
-

Tak uz jsem na to prisel. Diky vsem za podporu ;)

pernip01
Člen | 21
+
0
-

Vcelku řeším to samé, můžeš alespoň říci, kde ta chyba byla?