Jak předat řetězec helperu?
- KrawN
- Člen | 17
Ahoj,
DOUFÁM, že je to jen mou neznalostí, ale neumím předat výraz typu řetězec helperu:
{'cosi'|truncate:1}
Tato konstrukce se bohužel nezkompiluje. Proč?
Na čísla to dle https://latte.nette.org/cs/filters#…
funguje.
Díky za vysvětlení
- KrawN
- Člen | 17
@Tirus91
První možnost jsem samozřejmě měl na mysli, jen se to tu zobrazilo jináč.
Nefunguje.
Druhá možnost samozřejmě funguje, ale je těžce nepraktická. Díky.
@matej21
Děkuji, dříve jsem tam nesprávně používal !, ale účel to splnilo. =
funguje, jak jsem potřeboval.
Otázky:
- Proč to není v dokumentaci?
- Je nějaký důvod proč vývojáři neumožní {‚cosi‘|truncate:1}?
- Filip Procházka
- Moderator | 4668
Prostě se nepočítá s tím, že bude někdo chtít vypisovat a upravovat
„statickej“ string. Jaký má smysl taková operace? Není asi milionkrát
efektivnější prostě napsat c
místo
{"cosi"|truncate:1}
?
- David Matějka
- Moderator | 6445
@FilipProcházka obcas pouzivam neco jako
{="now"|date}
ale jde i o konzistenci. Kdyz jde zapsat
{=$foo}
i
{="foo"}
proc pak jde zapsat {$foo}
ale uz ne {"foo"}
?
- Filip Procházka
- Moderator | 4668
Protože latte je tak implementované a žádné makro {"
není
v latte zaregistrované. Neříkám že by to nešlo, ale prostě to Latte teď
neumí :)
Pullrq? :)
- David Matějka
- Moderator | 6445
@FilipProcházka tim to neni, problem je tady,
konkretne ![\\s\'"{}]
, kdyz ty apostrofy (a uvozovky) odmazu, tak
je to funkcni, testy projdou a vsechno. Jen nevim, jestli to neco nerozbije.
U uvozovek me napada, ze by to rozbilo json retezce,
{"foo": "bar"}
by to nove bralo jako makro…
A povolenim pouze apostrofu a ne uvozovek se dostavame jeste do vetsi
nekonzistence :(
- David Grudl
- Nette Core | 8201
Je to proto, aby to nekolidovalo s JSONem {"aa":123}
nebo
JavaScriptem {'aa':123}
či { 'aa':123 }
- KrawN
- Člen | 17
Díky za vysvětlení a omlouvám se za osočení dokumentace :).
Uznávám, že JSON a javascript možná použiji častěji (ikdyž kolegové
tu běsní, že ne). ALE i tak je konstrukce {'aa':123}
ve smyslu
js nekonzistentní se zbytkem Latte. function(){1}
je javascript,
ale Latte bude ty složené závorky parsovat. Kdo někdy přidával Google
Analytics ví, že tam javascript koliduje s Latte a tak to má být. Správný
zápis js by podle mě měl být explicitně, jak uvedl David,
{ 'aa':123 }
či function(){ 1 }
.
Díky za další reakce
Editoval KrawN (10. 9. 2014 10:09)
- David Grudl
- Nette Core | 8201
Nejde o to, že by to bylo nekonzistentní, prostě v určitých situacích
si umí Latte znak =
doplnit a v určitých ne.
- Jan Tvrdík
- Nette guru | 2595
@DavidGrudl Osobně se mi víc líbilo, když Latte =
nedoplňovalo nikdy a existovalo samostatné makro $
. Ta současná
implementace je víc magická, ale zase chápu, že je pěkné, že fungují
intuitivní věci jako {$var + 1}
.
- KrawN
- Člen | 17
@DavidGrudl
Dobře, ale tímpádem mi v tom trochu chybí systém.
Z pohledu uživatele jsem toho názoru, že je intuitivnější říct si „použiju literál stejným způsobem jako proměnnou“ bez přemýšlení nad tím, jestli se to někde kryje s nějakými konkrétními konstrukcemi cílového jazyka.
- Filip Procházka
- Moderator | 4668
Je fakt, že mimo kontext javascriptu by to mohlo fungovat… Ale pak jsou
zase problém html attributy… u některých by to fungovat zase nesmělo,
třena onclick
, data-
apod.
- David Grudl
- Nette Core | 8201
@KrawN nevím, co je na jednoduchém a všude platném pravidlu, že
po otevírací {
nesmí následovat uvozovka nebo mezera, tak
nesystémového a nahodilého?
- KrawN
- Člen | 17
@DavidGrudl
Davide, jsme přeci jen programátoři, takže mi dovol se pokusit opsat tvé
jednoduché pravidlo jinými slovy:
Za { nesmí následovat bílý znak. Může následovat literál, ale pouze
číselný, nebo řetězec bez uvozovek, který ovšem neobsahuje nějaký
rezervovaný nebo jinak nemístný znak na svém začátku.
Pořád ok?
- David Grudl
- Nette Core | 8201
Dalo by se to upravit tak, aby Latte rozlišilo mezi {"aa":123}
a {"aa"}
, tj. rozšířit podmínku o to, zda za ukončovací
uvozovkou následuje \s*:
Ale je to komplikování.