Možnosti vyvolání handle z javascriptu

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

Chlapi, prosím Vás – když volám funkci get z externího souboru, tak se mě správně zavolá handle, ale nic dalšího po tom řádku kódu v js funkci nevykoná (hlásí chybu missing : after property id).

Pokud mám script přímo v latte šabloně, pak se mi nezavolá handle, ale zbývající kód se provede bez problémů.

<script>
$.get({link employeeDelete!});
</script>

Poradil by mi někdo prosím možná řešení? Mockrát děkuji

Ot@s
Backer | 476
+
0
-

To co píšeš mi moc nedává smysl (resp. není se čeho chytit). V ukázce ale chybí zabalení kódu do ready-konstrukce (tj. spuštění JS počká na načtení kompletního DOMu stránky). Možná, že to tam máš, fakt nevím…

Phalanx
Člen | 310
+
0
-

Mám to celé ve funkci $(„.ajax“).live(„click“, function (event) {…

Už jsem pochopil první chybu – v souboru latte se mi ten odkaz přeložil, takže ta funkce get ani fungovat nemohla. Když jsem mezi složené závorky přidal mezery tak se handle volá stejně jako z externího js souboru.

<script>
$.get({ link employeeDelete! });
alert('tu');
</script>

Jde mi o to, že když zavolám handleEmployeeDelete() v presenteru, nezavolá se zbytek z mojí funkce. Tzn. alert už se neprovede. Pokud tam nemám funkci get() tak se mi alert zobrazí.

edit:
i když je ten handle prázdný, tak skript skončí s chybou. Nemohlo by to být kvůli chybné syntaxi js (missing : after property id) jak jsem psal v prvním příspěvku?

Editoval Phalanx (21. 2. 2012 17:38)

OK3
Člen | 91
+
0
-

Koukni na tohle https://componette.org/search/?…

Pokud máš ten skript v externím souboru (.js?), tak je jasné, že ti tam latte makro nemůže nic vypsat. Buď ten skript přesuň do těla nějaké šablony, nebo si to zajaxuj podle návodu výše.

Navíc koukám, že tam máš { link employeeDelete! } – odsazování od závorek se používá právě v tom opačnym případě, když nechceš, aby se ti syntax JS vyhodnocovala jako latte makra.

Editoval OK3 (21. 2. 2012 17:59)

Phalanx
Člen | 310
+
0
-

jquery.nette.js v projektu mám vložené přes include.

Zkouším volat handle jak z externího js souboru tak i přímo z latte.

Z latte šablony se mi nezavolá handle když to mám bez mezer ⇒ {link employeeDelete!}
zavolá se pouze pokud je s mezerami { link employeeDelete! } a to pak píše chybu s javascriptem, takže se nevykoná další část kódu.

Jsem ztracený… Podle všech návodů tady na fóru by mělo být správně volat z latte šablony {link employeeDelete!}, ale mě se ten handle nezavolá.

Všude kde jsem hledal mají stejnou syntaxi
https://forum.nette.org/…jak-v-navodu
https://forum.nette.org/…-link-singal

dcepelik
Člen | 36
+
0
-

Ahoj,

použití odsazení { link v tomto případě nedává smysl, jak již psal OK3.

Pokoušel jsem se dopracovat k chybě, kterou popisuješ („missing : after property id“) a povedlo se mi to takto:

(První značka značka script navíc, aby fungovalo zvýrazňování zde na fóru.)

<script>
<script type="text/javascript" n:syntax="off">
	$.get({link x!}, null,  function() { alert('dokončeno')});
</script>

Víš určitě, že nemáš pro blok script vypnuté Latte pomocí n:syntax="off" a že máš zaregistrovaný Latte filter? (Tj. je to šablona, která je vázaná na některou akci Nette, nebo si ji v kódu vytváříš sám?)

Phalanx
Člen | 310
+
0
-

dcepelik: Aha, takže latte filter musím mít vypnutý. Já prostě zkouším cestu, kterou to půjde správně a bohužel se mi to nedaří.

Mám tedy teď následující kód s chybou („missing : after property id“), což v praxi znamená, že se mi zavolá v pořádku handleEmployeeDelete (když si tam dám dump tak se vypíše správně), ale činnost javascriptu se bohužel zastaví kvůli tomu „missing : after property id“, takže se mi už alert(‚dokončeno‘) nevykoná :(

<script>
<script type="text/javascript" n:syntax="off">

$(".ajax").live("click", function (event) {
	event.preventDefault();
	// $.get(this.href); nefunkcni - pri vypsani alertem undefined
	$.get({link employeeDelete!}, null,  function() { alert('dokončeno')});
});

</script>

Editoval Phalanx (22. 2. 2012 6:31)

Etch
Člen | 403
+
0
-

@Phalanx:

Uveď zde jak máš definovanou metodu handleEmployeeDelete, jak máš přesně definovaný ajax požadavek. Používám ajax k odpalování signálů i natahování views a nikdy jsem s tím neměl problém.

Phalanx
Člen | 310
+
0
-

přepsal jsem si ten $.get(this.href) na $.get($(this).parents(„a:first“).attr(‚href‘) a už to vrací správnou adresu …/employee/default/7?do=employeeDelete

Tím pádem odpadla chyba s missing : after property id a šlape to :) Mockrát děkuju všem za přispění.

Editoval Phalanx (22. 2. 2012 9:03)