Component with name ‚XXX‘ does not exist

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

Ahoj,

už jsem v koncich s takovouto kravinou se trapim asi 40minut :(
mam presenter v nem tovarnicku

public function createCompomentAddEmailsForm($name){
    $form = new Form($this, $name);
    $form->addText("pocet", "Počet emailů")
         ->addRule(Form::FILLED,'Vyplňte prosím počet emailů');

    $form->addSelect("category", "Kategorie", Emails::getEmailCategoriesArray());
    $form->addSubmit('submit', 'Přidat')->onClick[] = callback($this, 'formAddEmailsSubmited');

}

v sablone pro akci Presenter:AddEmails

{block content}

{control addEmailsForm}

Tak proc mi to furt rve ze Component with name ‚addEmailsForm‘ does not exist. :(

Diky

Claudie1
Člen | 21
+
0
-

myslím, že porblém je v tom, že v komponentě ti chybí:

return $form;

Editoval Claudie1 (17. 8. 2011 17:30)

Jan Voráček
Člen | 90
+
0
-

@Kurtas: Mrkni se, jestli používáš Nette\Application\UI\Form a ne Nette\Forms\Form.

@Claudie1: v tom by být problém neměl, k presenteru ho připojuje pomocí konstruktoru.

EDIT: tak ne :) v metodě máš createCompoment

Editoval Jan Voráček (17. 8. 2011 17:35)

Kurtas
Člen | 109
+
0
-

@Jan Voráček: Moc díky, jsem věděl že to bude kravina, ale někdy holt člověk do toho může čučet dlouhé hodiny a překlep nenajde :)

Claudie1
Člen | 21
+
0
-

Jan Voráček napsal(a):

@Kurtas: Mrkni se, jestli používáš Nette\Application\UI\Form a ne Nette\Forms\Form.

@Claudie1: v tom by být problém neměl, k presenteru ho připojuje pomocí konstruktoru.

EDIT: tak ne :) v metodě máš createCompoment

překlep jsem pravda přehlédla

ovšem tomuhle úplně nerozumím:
" k presenteru ho připojuje pomocí konstruktoru."

v šabloně je volána control, ale ta přece neexistuje, protože createcomponent sice formulář uvnitř sebe vytvoří, ale nevrátí ho, tedy jakoby nevytvořila… nebo tomu rozumím špatně?

Kurtas
Člen | 109
+
0
-

Mrkni jak vypada __construct Nette\Forms\Form

Pokud pouzijes konstuktor u Form nemusis komponentu vracet, protoze ji práve pripoji tento konstruktor

Jan Voráček
Člen | 90
+
0
-

Jak řekl Kurtas, akorát je to Nette\Application\UI\Form :) API – do konstruktoru předáš $parent a formulář se přidá sám pomocí $parent->addComponent($this). Já ale stejně u každé továrničky ten formulář vracím, protože nevrátit nic v továrničce mi jde proti srsti :)

Claudie1
Člen | 21
+
0
-

aha. díky oběma. čím déle poznávám natte, tím víc mám pocit že nerozumím ničemu :-)

Editoval Claudie1 (18. 8. 2011 10:11)

Filip111
Člen | 244
+
0
-

:) +1

newPOPE
Člen | 648
+
0
-

Pokial viem, tak @hosipLan niekde spominal, ze nie je potrebne pripajat komponenty cez konstruktor. Ale ako pise @Jan Voráček tak ich stačí vrátit a Nette si ich pripojí samo.

Používam to tak a funguje to, potom sa naozaj daju robit dost velke veci cez kontruktor napr DInjekcie atd…