Návrh aplikace – Presenter, jak na to?
- Bublafus
- Člen | 9
Ahoj,
snažím se udělat svojí první aplikaci v nette. Quickstart jsem pročetl a
začal si upravovat příklad s todolistem. Měl bych tady dva
začátečnické dotazy
1)
TodoListPresenter je zde k obsluze todo. Ale co kdybych chtěl zároveň
zobrazovat todo a zároven položky menu (které bych tahal z datábáze)? Jak
jsem pochopil MVP, k načtení menu z databáze potřebuju nový Presenter.
Ale pak je hloupust aby byly aktivní dvě akce ruzných Presenterů zároveň,
ne? Nebo by se o menu měl starat stejný presenter? Jak na to? :)
2)
Když jsem chtěl přidat něco jako „změnit úkol“, udělalal jsem si
signál, který redirectem odkazoval na akci Change (odesílal parametr id)
<?php
<a href="{link change!, $todo->id}">změnit</a>
?>
<?php
public function handleChange($id)
{
$this->redirect('TodoList:change',array('p_id' => $id)); //produkt id
}
?>
Toto rešení mi přišlo jako fuj – a tak jsem se chtěl zeptat, jesli
jde nějak předat parametr id (aby bylo jasné jaký todo chci změnit) rovnou
na akci Change?
V akci Change uz normálně přes widget zobrazuju formulář na
změnu údajů.
Nejsem zběhlej v terminologii, takže kdybych kecal blbosti, budu rád za
objasnění:)
Díky moc!
- redhead
- Člen | 1313
- na to jsou přesně stvořené komponenty (jeden presenter může mít více komponent a ty zobrazovat ve svých šablonách (akcích) a může je používat napříč akcemi a stejnou komponentu může zase používat více presenterů, atd.)
- v čem je tady problém?
{link TodoList:change $todo->id}
Editoval redhead (29. 7. 2010 21:34)
- Ani
- Člen | 226
- O položky databáze by se měl starat presenter a vzhledem k faktu, že menu je společné pro více presenterů, bude nejlepší, když to bude nějaký z kterého ostatní dědí (v tom QS se jmenuje BasePrasenter). e: případně ta varianta jak píše redhead, ale to je o něco složitější.
- Tak neodkazuj na signal, ale rovnou na ten pohled.
Editoval Ani (29. 7. 2010 21:37)
- Bublafus
- Člen | 9
redhead napsal(a):
- na to jsou přesně stvořené komponenty (jeden presenter může mít více komponent a ty zobrazovat ve svých šablonách (akcích) a může je používat napříč akcemi a stejnou komponentu může zase používat více presenterů, atd.)
Teď moc nevím, co myslíš těma komponentama? Nějakej nápad, kde bych to mohl okoukat? :)
- v čem je tady problém?
{link TodoList:change $todo->id}
Aha, ale musím mít založenou metodu renderChange($p_id), at už třeba
prázdnou.
(Teď bych ten formulář mohl vykreslovat v těle tý metody
renderChange??)
Jinak, proč tam nejde použít $id? Me ten parametr pak nejde přečíst
- redhead
- Člen | 1313
- dokumentace?
- metodu mít nemusíš, hlavně tam musí být šablona change.phtml. Formulář vykresluj až v tý šabloně (přes makro widget – stejně jako formulář pro vkládání. Btw formulář je taky komponenta – tvořená v metodě createComponent*() )
- Bublafus
- Člen | 9
redhead napsal(a):
- dokumentace?
- metodu mít nemusíš, hlavně tam musí být šablona change.phtml. Formulář vykresluj až v tý šabloně (přes makro widget – stejně jako formulář pro vkládání. Btw formulář je taky komponenta – tvořená v metodě createComponent*() )
- Jo, už to trochu začínám chápat. Jsem našel i ve složce distribuce Nette/examples/modules-usage, tam je to docela přehledné.
- Odkaz v šabloně mám jak si psal, šablonu change.phtml mám (i ve správné složce), (vykresluju přes ten widget). Ale pokud tam nemám metodu renderChange($p_id) tak ten odkaz zčervená a odkazuje to na error:%20Extra%20parameter%20for%20'Produkt:change'. Čím to?