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

Caute, chcel by som vediet ako mozem poslat komponente v presentery parameter cez sablonu.
Teda v latte si cyklom prechadzam data a v kazdom cykle chcem do komponenty v presentery poslat id. Nasiel som nejake taketo riesenie:
{?$component[‚karmaForm‘][‚id‘]->value = $reply->id}
zial hadze mi chybu Creating default object from empty value.

Tiez som skusal klasicke:
{control karmaForm $reply->id}
ale tiez nefunguje.

Nejake napady ako to spravit? Dakujem.

Lukeluha
Člen | 130
+
+1
-

Buď si předej celou tu kolekci přímo do komponenty a vykreslování řeš až v šabloně komponenty anebo pomocí {control karmaForm $reply->id}. Toto ti zavolá metodu render s parametrem $reply->id.

Eda
Backer | 220
+
+1
-

Možná by se pro ten tvůj use-case spíš hodil Multiplier. Ten ti pak pro každou hodnotu jednoduše vytvoří vlastní komponentu.

Evidentně děláš to, že vypisuješ jednu komponentu vícekrát s jinými daty, což moc není příklad best-practise :-)

Lukeluha
Člen | 130
+
0
-

Záleží na tom, co @drick přesně s tou komponentu zamýšlí :) vypadá to ale že tam má nějaký formulář, takže Multiplier by byl asi nejlepší řešení.

drick
Člen | 61
+
0
-

no asi to cele prepisem do presenteru .. ale pre zaujimavost – Toto {control karmaForm $reply->id} zavola metodu render? Ako? Kde? Myslíš renderDefault?
Ja som to totiz takto chcel povodne robit, ale nevedel som sa dopracovat k tomu parametru.

Editoval drick (17. 6. 2015 18:02)

Lukeluha
Člen | 130
+
0
-

Máš komponentu s názvem karmaForm. Ta by měla v sobě obsahovat metodu render, aby se dala vykreslit. Pokud v šabloně napíšeš {control karmaForm $id}, tak se na komponentě karmaForm zavolá render($id). Je to srozumitelnější? Kdyžtak si přečti dokumentaci

Editoval Lukeluha (17. 6. 2015 19:12)

drick
Člen | 61
+
0
-

Takto, ak sa este mozem opytat. Ja som si tu zrejme pomylil pojmy. To co ja chcem je vo svojom presentery vytvorit 2 buttony na pridavanie alebo uberanie karmy. Robil som to tak, ze som si do tohto svojho presenteru pridal metodu createComponentReplyForm() a v nej mam:
$form = new Nette\Application\UI\Form;
$form->addButton(‚raise‘, ‚+‘)
->setAttribute(‚onclick‘, ‚increaseKarma()‘);
Teraz chcem spravit to, ze do tejto metody si chcem poslat z latte sablony to $reply->id. Ako to co najjednoduchsie docielit? Mam si vytvorit novu triedu len na komponent?

Lukeluha
Člen | 130
+
0
-

V tomto případě bych to neřešil vůbec přes formuláře, to přece žádný formulář není, pouze jedno tlačítko. Takže bych přidal obyčejné tlačítko – odkaz přímo do šablony, které bude vést na handler, který odebere/přidá karmu. Pokud bys to chtěl vyřešit AJAXem, poté použij nette ajax knihovnu od Honzy Dobeše

Editoval Lukeluha (17. 6. 2015 19:53)

drick
Člen | 61
+
0
-

To znie lepsie, len mam problem, ze mi tie handle nefunguju. Nevedel by si mi prosim povedat, kde mam chybu?
latte: <button><a n:href=„decreaseKarma! $reply->id“>-</a></button>
v presenteri mam metodu handleDecreaseKarma($id) , ale tam sa zjavne nedostanem (nic sa nedeje)

Lukeluha
Člen | 130
+
0
-

Zaprvé by nejspíš mělo být <a><button>..</button></a> a zadruhé co znamená že to nefunguje? Vůbec se nenačte nová stránka? Jak vypadá vygenerovaný odkaz? Kdyžtak ještě zkus přepsat parametr u handleru z $id na $replyId, parametr s názvem $id používá nette pro idčko komponenty, možná to může dělat neplechu.

Editoval Lukeluha (17. 6. 2015 21:19)

drick
Člen | 61
+
0
-

Aha, no chyba bola zjavne len v tom, ze najprv som mal <button> a az potom <a>, to som necakal. Kazdopadne dakujem velmi pekne za pomoc.