Snippety a spol

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

Zdravím. Náhle mi přestalo fungovat AJAXování v Nette. Vůbec netuším, čím může být problém způsoben. Podrobným zkoumáním a zkoušením jsem se dopracoval těchto 2 bodů:

  1. Požadovaný snippet se přenese, ale jeho hodnota je null. Jak to vím? Upravil jsem callback jQuery.nette.success:
<script>
  if (payload.snippets) {
    for (var i in payload.snippets) {
      alert(i + " - " + payload.snippets[i]);
      //jQuery.nette.updateSnippet(i, payload.snippets[i]);
    }
}
</script>

Výsledný alert hlási: snippet–posts – null

  1. Neměla by být chyba ve stránkovaní logice, databázových dotazech apod. Proč? pokud vypnu JavaScript, tak přes klasický neAJAXový request vše funguje.

Jediné trochu rozumné vysvětlení, kteé mě napadá, je špatné rozmístění zavináčů. To se mi ovšem zdá správné:

@layout.phtml – @{include #content}

– default.phtml – 1 x @{block #content}, v bloku je snippet posts, který
kompletně obaluje veškerý obsah.

Nette: 0.9.3, revize 42e9ad2.

Honza Kuchař
Člen | 1662
+
0
-

Je to chyba zavináčů. ;) Ještě si zkontroluj zavináč před extends

P.S.: Nainstaluj si Firefox a do něj Firebug a FirePHP. Rozhodně ti to usnadní vývoj ajaxových aplikací.

Jakub Lédl
Člen | 55
+
0
-

Ehm… {extends}?

To se v nových šablonách (oldLayoutMode = FALSE) používá?

Honza Kuchař
Člen | 1662
+
0
-

Pokud tam extends nikde nemáš, tak to řešit nemusíš. Nette se o to postará samo. Ale pokud používáš extends a u tohto používáš AJAX, tak musíš mít před extends zavináč.

P.S.: Extends se používá právě v nových šablonách. Ve starých se používalo $presenter->setLayout(); což bylo návrhově špatně a ještě to neumožňovalo dělat kaskády.

Jakub Lédl
Člen | 55
+
0
-

Tak tohle bych potřeboval trošičku vysvětlit.

Nepoužívám {extends}. OldLayoutMode mám na FALSE. Jakmile tedy odstraním zavináče (což je, předpokládám, to co jsi myslel tím „Nette se o to postará samo“, i když je pro mě novinkou, že by @ magie byla pasé), tak se mi náhle šablony renderují bez layoutu. Jakmile tam @ vrátím (do layoutu před include, do šablony před block), mám layout zpět. Nicméně, přesevšechno co dělám, AJAX stále ne a ne fungovat.

Už jsem se v tom ztratil. Jaké šablony tedy používám? Proč to pořád nefunguje? Je vůbec černá černá a bílá bílá?

i.magine
Člen | 81
+
0
-

Zavináčová magie stále bohužel pasé není, honzakuchar chtel jenom napsat že před vkládaný blok není nutné psát extends, ale můžeš, a pokud to děláš, nesmíš zapomenout na zavináč.

Ola
Člen | 385
+
0
-

Zkontroluj si to celé podle https://forum.nette.org/…agie-v-praxi.