Latte maže argumenty z metod a indexy polí
- Babant
- Člen | 4
Ahoj,
narazil jsem na takovou zajímavou chybku při aplikaci Latte filtru na níže
uvedený kus kódu.
Syntaxe je nastavená na ‚double‘, ale ve výsledku to nemá vliv.
Template s Latte filterem, které dám jako zdroj kód obsahující
// IE<9
args = [].slice.call( arguments, 0 ),
mi na konci vrátí
// IE<9
args = [].slice.call( arguments, ),
Kritické je to znaménko menší než.
V první řadě jsem se chtěl zeptat, jestli se s tím už někdo nesetkal. A potom, nejsem zrovna expert na vnitřní funkčnost Latte a proto bych uvítal názor někoho, kdo se trošku víc vyzná, než to budu dávat někam do issue trackeru.
(Nette 2.0; PHP 5.3.3)
- Babant
- Člen | 4
Po dalším zkoumání jsem zjistil, že kritické je nejenom to znaménko
<
, ale i hodnota toho mizícího parametru.
// <
args = [].slice.call( arguments, 0 ), // nula zůstane
// <#
args = [].slice.call( arguments, 0 ), // nula zůstane
// <0
args = [].slice.call( arguments, 0 ), // nula zůstane ale ten komentář '<0' zmizí
// <9 (nebo jakékoliv číslo větší než nula)
args = [].slice.call( arguments, 0 ), // nula zmizí
// <X
args = [].slice.call( arguments, 0 ), // nula zmizí
// Pokud je místo nuly parametr 1, pak není odstraněn.
// <9
args = [].slice.call( arguments, 1 ), // jednička zůstane
// <0
args = [].slice.call( arguments, 1 ), // jednička zůstane ale komentář '<0' zmizí
- Filip Procházka
- Moderator | 4668
To bude bug. Bylo by dobré, vyplnit issue na githubu, pokud neumíš anglicky, tak alespoň česky. Díky :)
- David Grudl
- Nette Core | 8228
A je ten kód korektně uzavřen do značek
<script>...</script>
? Pokud nejde o HTML ale o JS, je
třeba nastavit content-type, například {contentType js}
.
- Babant
- Člen | 4
David Grudl napsal(a):
… je třeba nastavit content-type, například
{contentType js}
.
Díky Davide, správný content-type ten problém řeší.
Teď jen zjistit, jak ho nastavit přímo v kódu, tzn. bez nutnosti vkládat makro na začátek každého stringu, na který chci latte aplikovat.
Pro syntaxi stačilo nastavit
$latte->parser->defaultSyntax = 'double';
Ale z nějakého důvodu
$latte->compiler->defaultContentType = 'js';
nemá stejný efekt jako {contentType js}
.