formulář v jiném souboru než je jeho presenter

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

Ahoj, snažim se odtrhnout už odladěný formlulář od mateřského presenteru (kvůli přehlednosti). Ale ve chvíli, kdy ho odtrhnu, přijdu o vazbu (v komponentě už proměnná $this neoznačuje presenter a jeho data). Jde mi hlavně o obsluhu tlačítek.

I když vytvořím nový presenter jako potomka původního (máme přístup k datům), tak při vykreslování v šabloně mi to hlásí Component with name '...' does not exist. Je mi jasné, že v původním presenteru už neexituje, ale nevím jak z toho ven..

Nechci z formuláře dělat automonmí komponentu (form je závislý na proměnných presenteru). Můžete mě někdo nakopnout, pls?

// Pozn: Samozřejmě používám továrničku.

Editoval Šaman (31. 3. 2010 15:53)

Filip Procházka
Moderator | 4668
+
0
-

udělej z něj komponentu a používej $this->getParent()->getParam('wtf'); a nebo popř. $this->getPresenter()->getParam('wtf');

Honza Marek
Člen | 1664
+
0
-

Presenter:

protected function createComponentOdtrzenejForm() {
	return new OdtrzenejForm;
}

Formulář (poděděná třída OdtrzenejForm):

<?php
class OdtrzenejForm extends AppForm {

	public function __construct(IComponentContainer $parent = null, $name = null) {
		parent::__construnct($parent, $name);
		$this->addText("blabla", "blabla");
		//...

		$this->addSubmit("ok", "Ok")->onClick[] = array($this, "odeslat");
	}

	public function odeslat(SubmitButton $btn) {
		$values = $btn->form->values; // nebo $this->values
		NejakejModel::ulozit($values);
		$this->presenter->flashMessage("Všechno OK");
		$this->presenter->redirect("default");
	}

}
?>

Editoval Honza Marek (7. 4. 2010 12:27)

Šaman
Člen | 2664
+
0
-

Ahoj, o tu komponentu se snažím, ale zatím bezvýsledně – nemáte někdo zpracovaný obyčejný formulář jako komponentu, pls? Našel jsem na fóru ‚tohle‘:https://forum.nette.org/…o-komponenta ale na metodě render() mi to hlásí Component name must be integer or string, NULL given. A stránka v QuickStartu tvoříme komponentu neexistuje. Případně sepsat krátký postup na to, jak z komponenty v továrničce v presenteru (na to je návodů spousta) vytvořit komponentu v samostatné třídě. Díky.

Honza Marek
Člen | 1664
+
0
-

Na „komponentu“ se vykašli, vyrob si ten poděděnej funkční formulář.

Šaman
Člen | 2664
+
0
-

Super, s OdtrhnutymFormem jsem se dostal zatím nejdál. Samotný formulář se mi vykreslí, šablonu nastavuji pomocí {include 'formKrok1.phtml', form => $presenter['kalkulatorKrok1Form']}, tj. stejně jako když byl součástí presenteru, ale při volání $defaults = $this->presenter->data->getData(..); mi vyběhne hláška: Component '' is not attached to 'Presenter'. Nevadí, že celá definice formuláře i s načítáním $defaults je v __constructoru?

Editoval Šaman (7. 4. 2010 14:11)