Akce v komponentě – samostatná šablona+zpracování formuláře

David Klouček
Člen | 57
+
0
-

Ahoj, potřeboval bych poradit, nejspíš špatně používám komponenty. Mám presenter ProductDetail a akci View, ve které se používá několik komponent a mimo jiné i ParamsControl.

class ProductDetail extends BasePresenter {
	public function renderView() {}
	protected function createComponentParams() {
		$cmp = new ParamsControl();
		return $cmp;
	}
}
class ParamsControl extends \Nette\Application\UI\Control {
	public function renderMain() {
        $this->getTemplate()->setFile(__DIR__.'/main.latte');
        $this->getTemplate()->render();
	}
	public function renderOther() {
        $this->getTemplate()->setFile(__DIR__.'/other.latte');
        $this->getTemplate()->render();
	}
}

Vykresluje se na 2 místech v šabloně viz části Main a Other. Dále potřebuju akci, co bude odpovídat JSONem:

public function handleGiveMeData() {
	$this->getPresenter()->sendJson([/*..*/]);
}

To už je nejspíše špatně, protože signál má udělat nějakou změnu a nevracet odpověď, ale každopádně to funguje.
A teď k problému: Potřebuju udělat podobnou metodu, která bude vracet jako odpověď vlastní šablonu (konkrétně pro modální okno) s formulářem:

	protected function createComponentCreateParamForm() {
		$form = new Form();
		$form->setAction($this->link('CreateParam!'));
		$form->onSubmit[] = [$this, 'createParamFormSubmitted'];
		return $form;
	}
public function handleCreateParam()
{
    $this->getTemplate()->setFile(__DIR__.'/createParam.latte');
    $this->getTemplate()->render();
    $this->getPresenter()->terminate();
}

Jenže signál se vyvolává pomocí proměnné „do“ v URL a továrnička pro zpracování formuláře rovněž potřebuje „do“, takže se formulář nezpracuje. Nevíte jak toto řešit? Nestačí mi komponentu vykreslit na jednom nebo více místech, ale potřebuju aby mohla mít akce jako presenter.

Editoval David Klouček (25. 10. 2017 21:21)

CZechBoY
Člen | 3608
+
0
-

Nemuzes to modalni okno vykreslit a v javascriptu ho jen zobrazit pri odeslani formulare?

David Klouček
Člen | 57
+
0
-

CZechBoY napsal(a):

Nemuzes to modalni okno vykreslit a v javascriptu ho jen zobrazit pri odeslani formulare?

Mě zajímá, jak se to řeší, ne obchází.

CZechBoY
Člen | 3608
+
0
-

Já to řešim tak, že vyrenderuju modalní okno hned a zobrazim ho přes javascript až se odešle formulář ;-)