CurlyBracketsFilter v JS a escapeJs()

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

Automaticke uvozovkovani PHP promennych je mozna vice na skodu nez k uzitku.
V sablone mam:

<script type="text/javascript">
   $('#{$control->name}_add').hide();
</script>

to se prevede na

$('#"control_name"_add').hide();

spravne potrebuji

$('#control_name_add').hide();
vlki
Člen | 218
+
0
-

Vetsinou to je vhodne.

A pokud nechces escapovat, tak vypis promennou pomoci vykricniku: {!$control->name}

Ondrej
Člen | 110
+
0
-

vlki napsal(a):
A pokud nechces escapovat, tak vypis promennou pomoci vykricniku: {!$control->name}

Diky, vykricnik to vyresil :)

Ondrej
Člen | 110
+
0
-

nicmene to neresi problem

<script>
	msg = document.getElementById('message').value;
 	nette.action('{link addComment}&{!$control->name}-text='+encodeURIComponent(msg))
</script>

odesilam prispevek do diskuze ajaxem, takze parametr do vygenerovane URL pridavam javascriptem. Vystup {link addComment} je v uvozovkach :(

Vyresil jsem to {!$control->link(‚addComment‘)},
ale presto jsem proti automatickemu escapovani, protoze me to moc uzitecne nepripada.

Editoval Ondrej (14. 2. 2009 19:38)

Jan Tvrdík
Nette guru | 2595
+
0
-
<script>
        var msg = document.getElementById('message').value;
        nette.action({link addComment} + '&' + {$control->name} + '-text=' + encodeURIComponent(msg));
</script>
kravčo
Člen | 721
+
0
-

Jan Tvrdík napsal(a):

<script>
        var msg = document.getElementById('message').value;
        nette.action({link addComment} + '&' + {$control->name} + '-text=' + encodeURIComponent(msg));
</script>

Inými slovami: nevkladaj nazvy komponentov alebo linky do javascriptových stringov priamo, ale použi štandardné escapované vypísanie a výsledky potom zreťaz dohromady.

PetrP
Člen | 587
+
0
-

kravco napsal(a):

Inými slovami: nevkladaj nazvy komponentov alebo linky do javascriptových stringov priamo, ale použi štandardné escapované vypísanie a výsledky potom zreťaz dohromady.

Ještě jinými slovy: pracuj s tím jako by to byli javascriptové proměně. ;]

Mnohem větší problém vidím v náhodném volání CurlyBracket např v jQuery:

if (true) {$('#control_name_add').hide();}
// a další podobné
David Grudl
Nette Core | 8228
+
0
-

Vykřičník – tedy neescapovat – rozhodně nedoporučuji. Správné řešení uvádí Jan Tvrdík a Kravco.

PetrP napsal(a):

Mnohem větší problém vidím v náhodném volání CurlyBracket např v jQuery:

Holt je na to potřeba dávat bacha a za znak { vkládat mezeru nebo zalomení řádku.

PetrP
Člen | 587
+
0
-

David Grudl napsal(a):

Holt je na to potřeba dávat bacha a za znak { vkládat mezeru nebo zalomení řádku.

A nešlo by to nějak řešit? Existuje situace kdy v CurlyBrackets potřebuju zapsat toto?:

{$.neco}
{$(neco)}

Tedy jako druhý znak po $ tečka nebo závorka.

Jod
Člen | 701
+
0
-

A v php by si to zapísal akože ako? =D

David Grudl
Nette Core | 8228
+
0
-

PetrP napsal(a):

David Grudl napsal(a):

Holt je na to potřeba dávat bacha a za znak { vkládat mezeru nebo zalomení řádku.

A nešlo by to nějak řešit? Existuje situace kdy v CurlyBrackets potřebuju zapsat toto?:

{$.neco}
{$(neco)}

Tedy jako druhý znak po $ tečka nebo závorka.

Tohle třeba konkrétně ne, ale co třeba {if apod. Prostě je lepší tu mezeru tam vždycky psát.

PetrP
Člen | 587
+
0
-

Jod napsal(a):

A v php by si to zapísal akože ako? =D

No tak CurlyBracket používaj regulární výrazy, takže jejich jednoduchou úpravou by toho dosáhnout normálně dalo. Ale David má pravdu (samozřejmé jako vždy ;]) a konstrukce jako {if by odchytat nešly a tedy bude lepší to nedělat nikde ;]