Invalidace proběhne jen u jednoho snippetu
- Darkry
- Člen | 101
Zdravím,
jako tady hodně lidí si vyvíjím vlastní RS :-) a hned ze začátku mi
nastal problém. Mám rozpracované AJAXové přidávání textů na web. Po
kliknutí na tlačítko + (pravý horní roh tabulky) v kategorii TEXTY NA WEBU
se zobrazí jQuery UI dialog ve kterém je formulář, který se odesílá přes
jQuery forms nette plugin. Používám pro odeslání jQuery tlačítko, které
triggeruje click na normální submit, který je skrytý. Problém je v tom,
že po zpracování požadavku se invalidují dva snippety: flashMessages a
textList (to je ta tabulka). Ale bohužel se zobrazí na webu jen jeden z nich
(flashmessages) a ten druhý sice přijde zpátky AJAXem, ale už se nepoužije
na stránce.
Ještě pak je zde jeden problém, ale ten se pravděpodobně netýká nette, tak to jenom pokud by někoho něco napadlo. Jde o to, že se formulářem vůbec neodešlou texty (krátká verze ani plná) do nette přijdou prázdné. Řekl bych, že to souvisí s použitím CKEditoru s tím odesíláním přes AJAX, ale nevím jak to opravit :-).
Každopádně hlavní problém je ten první. Kód je zde:
https://gist.github.com/…68e432b99dc7
(invalidace 3. soubor řádky 19–22)
a Ukázka webu zde:
http://www.dark-project.cz/darkadmin/admin
(jméno admin heslo password)
Díky moc
PS: ten config na gistu se nelekejte to není nette config :). Je to config adminu.
Editoval Darkry (10. 8. 2011 17:20)
- Darkry
- Člen | 101
Edit:
pokud přidám do zpracování formuláře:
$this->texts = Model\TextsModel::selectTexts();
tak se to provede (tj. pokud to co normálně provádí actionDefault dám i do zpracování), ale to se mi zdá jako špatná cesta. Musím mít na dvou místech stejný kod (a je delší než jenom tento jeden řádek)…
Zde je action a render: https://gist.github.com/…23271c4e52af
Editoval Darkry (10. 8. 2011 17:49)
- Mikulas Dite
- Člen | 756
n:snippet
by měl normálně fungovat, používám to. Je to
vlastně n:block
makro.
- 22
- Člen | 1478
tak, to je jasné, výplývá to jaksi z životního cyklu..
podle mě se dá to actionDefault zrušit a akorat ve zpracování naplnit
proměnnou $this->texts, nikde jsem to tam nezahlídl, normálně se dá kod
i obarvit na gistu. Jinak to zkracování by ch dal do nějaké extra metody a
nedá se použít Strings::truncate()?
- Darkry
- Člen | 101
22:
takže se při snippetu ani nezavolá actionDefault? Myslím, že by se při
invalidaci měla aktualizovat ta proměnná. Na to zkracování mrknu. Díky.
Ale když to načítání dám jenom do zpracování formu tak se to nezobrazí
na začátku :-). Takže budu muset mít ten samej kod na 2 místech?
- 22
- Člen | 1478
podívej se na ten obrázek
v action metodě se plní většinou formulář, submit se provede po
action – před render. Takže je potřeba naplnit proměnnou, kterou
posíláš do šablony a na to by se asi mělo stát při
zpracování formu.
ale když to načítání dám jenom do zpracování formu tak se to nezobrazí na začátku :-)
nevím, co znamená.. form jsem nestudoval, pokud je to filtr, tak bych si zavedl proměnnou $this->filter a podle obsahu proměnné bych v render metodě natáhl správný data…
- Darkry
- Člen | 101
Tý jo :-). Jsem asi úplně špatně chápal princip action a render. Prozatím jsem to dělal tak, že všechny data se zpracovávaly v action a v render se akorát předaly proměnné šabloně. Ve skutečnosti je to ale tedy tak, že by se to všechno mělo dělat render a action jen rozhodovat o přesměrování (popř. změně šablony)? Chápu to nově dobře? :-)