Deklarace proměnné a předání do javascriptu
- BuMoRi
- Člen | 109
Ahoj, v určitém místě v šabloně chci použít deklaraci proměnné a tu si předat do javascriptu. Lze to nějak? Vypisuje Undefined variable.
- MajklNajt
- Člen | 502
Ahoj, pozrel si do výsledného HTML, čo ti to vygeneruje? {var …} ti deklaruje premennú pre použitie v šablóne, nie pre JS. Ak chceš tú premennú posunúť javascriptu, mal by si ju vypísať takto nejako:
{var $foo = "bar"}
<script>
var fooForJS = {$foo};
</script>
Pozor na to, aby si ju pre JS nedeklaroval s úvodzovkami, latte si ich tam pridá samo vďaka context-aware
- BuMoRi
- Člen | 109
No právě tento kód tam mám, a ten mi píše Undefined variable foo.
Nicméně v pátrání jsem pokročil v tom, že toto se děje, když
proměnnou deklaruju v {block content} a předávám v {block scripts}. Pokud
bych jí deklaroval v {block scripts}, tak to funguje. Ale to je mi
nanic :(.
- MajklNajt
- Člen | 502
tak to potom vyzerá na problém poradia – ak skript, ktorý tú premennú
potrebuje, spúšťaš (inkluduješ/vypisuješ) skôr, ako je zadefinovaná,
potom logicky vyhadzuje Undefined variable
. Skús ten skript
spustiť až na udalosť DOM load/ready – napr. v jQuery to vložiť
do $('document').ready( .... );
- MajklNajt
- Člen | 502
Sorry, až teraz som si všimol, že tebe vyhadzuje undefined variable foo už Nette, ja som celý čas v tom, že ti to vyhadzuje javascript.
Ono to takto asi nerozchodíš, ak premennú definuješ v inom bloku ako používaš, tie bloky sa (myslím) kompilujú do PHP ako callbacky, čiže nevidia premenné z iných blokov…
- BuMoRi
- Člen | 109
No je mi jasný, že tam musim dělat nějakou totální kravinu, ale fakt nevim…
@layout.latte
<!DOCTYPE html>
<head>
<!-- Bootstrap -->
<link href="{$basePath}/css/bootstrap/bootstrap.min.css" rel="stylesheet" media="screen">
<!-- Custom Template Styles -->
<link href="{='css/style.css'|asset}" rel="stylesheet" media="screen">
</head>
<body>
{include content}
{block scripts}
<!-- ======================= JQuery libs =========================== -->
<script type="text/javascript" src="{$basePath}/js/jquery.1.8.2.js"></script>
<!-- Custom -->
<script type="text/javascript" src="{$basePath}/js/custom.js"></script>
{/block}
</body>
</html>
default.latte
{block content}
<footer id="menu-contact">
{var $foo = "bar"}
</footer>
{/block}
{block scripts}
{include parent}
<!-- přehrávání audia -->
<script type="text/javascript" src="{$basePath}/js/audio.js"></script>
<script>
$(document).ready(function() {
var fooForJS = {$foo};
alert(fooForJS);
});
</script>
{/block}
- BuMoRi
- Člen | 109
No myslel jsem si že je to těma blokama, poslal jsem to dřív, než jsem
si přečet poslední příspěvek. Každopádně díky za pomoc.
Já teda ještě napíšu, čeho chci vlastně docílit a myslim že mi
pomůžete najít lepší řešení.
Chci vypsat zkratku článku, jen 100 znaků, plain text (tzn. s využitím
makra striptags). A klasicky tlačítko „More“, ale aby už text byl
včetně tagů z wysiwyg editoru. Proto jsem ho chtěl uložit do proměnný a
z ní ho přepsat místo původní zkratky. Krom této varianty mě napadlo
ještě si znovu ajaxem článek vyvolat z DB, a pak mám řešení, že si ho
vypíšu ještě jednou, do skrytého divu a pomocí JS si z něj změním
zkratku na celý článek. Toto funguje OK, jen se mi to zdá trochu kostrbatý.
Kdyby měl někdo lepší nápad, jak toto vyřešit, budu rád za
jakoukoliv radu.