Invalidace proběhne jen u jednoho snippetu

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

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)

22
Člen | 1478
+
0
-

a kde jsi vzal n:snippet ???

Darkry
Člen | 101
+
0
-

To neexistuje? Mám to i u flashMessages a ty jdou v pořádku, každopádně to klidně změním, ale není myslím žádná změna…

Darkry
Člen | 101
+
0
-

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
+
0
-

n:snippet by měl normálně fungovat, používám to. Je to vlastně n:block makro.

Darkry
Člen | 101
+
0
-

Jsem si řikal, jaktože mi to funguje, kdyby to neexistovalo :-). Každopádně problém přetrvává. Mám upřesnění, že AJAX sice vrátí obsah TextList snippetu, ale bez toho právě přidaného textu.

22
Člen | 1478
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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? :-)

22
Člen | 1478
+
0
-

ano, většina věcí se dá udělat až v render metodě a není potřeba action.