problém s makry v javascriptu
- o.x.i
- Člen | 7
Cao, potřeboval bych poradit, jak zabudovat makro do javascriptu, který je
přímo v šabloně.
Zde jsem si přečetl
https://doc.nette.org/cs/quickstart#…
jak hodit makro do javascriptu, ale pomoci double syntaxe mi to nejde :(
zde je kod
<script>
<script type="text/javascript" n:syntax="double">
document.getElementById('link').href = "javascript:preview('{{$basePath}}/upload/{{$picture->nazev}}')";
</script>
</script>
zkousel jsem ruzne kombinace metodou pokus omyl a zadna mi nejde, pokud misto maker dám konkretni hodnoty, tak script funguje normalne.
Dekuju vsem za pripadné rady
- bojovyletoun
- Člen | 667
syntax double v tvém příkladu mi šlape v pořádku- máš dostatečně nové nette? a nějou chybovou hlášku to háže nebo kde jechyba?
Editoval bojovyletoun (27. 12. 2010 22:51)
- o.x.i
- Člen | 7
verzi mam 2.0, zadnou chybovou hlasku to nehaze, jenom nefunguje ten javascript, kdyz si otevre zdrojovy kod, tak by tam melo byt neco takoveho:
<script>
document.getElementById('link').href = "javascript:preview('/sem2/www/uploadedData/Tulips.jpg')";
</script>
ale s double syntaxi mi to udela tohle:
<script>
document.getElementById('link').href = "javascript:preview('"\/sem2\/www"/uploadedData/"Tulips.jpg"')";
</script>
Editoval o.x.i (27. 12. 2010 23:01)
- redhead
- Člen | 1313
Není to double syntaxí, je to escapováním znaků pro javascript.
Všechny stringy se escapují podle JS a přidávají se uvozovky. Tvůj příklady by šel (s escapováním) zapsat jako:
preview({{$basePath}}+'/upload/'+{{$picture->nazev}})
nebo
preview({{=$basePath.'/upload/'.$picture->nazev}})
Editoval redhead (27. 12. 2010 23:08)
- bojovyletoun
- Člen | 667
myslím, že teď jsi právě pohřbil bezpečnostní featuru frameworku, podle mě správné řešení je od redhead druhé
- Šaman
- Člen | 2666
Jen bych dodal, ža kromě double syntaxe u maker můžeš používat i způsob jednoduchých závorek a tam kde nechceš aby byly chápány jako makro, tak tam dáš za otevírací závorku mezeru.
<script>
{makro}
{ něco ve složených závorkách, třeba fce v JS}
</script>
Taky si myslím, že JS patří mimo šablonu, ale jak pak řešíte
{$basepath}
a {plink}
? Já jsem to musel přepsat na
absolutní cesty, ale to se mi vůbec nelíbí. Pokud se přesunu na server, kde
budu k aplikaci přistupovat třeba jako server.name/www/
tak mi
to nebude fungovat.
Editoval Šaman (28. 12. 2010 13:06)