Jak převzít pole v šabloně do javascriptu?
- Filip Procházka
- Moderator | 4668
$template->registerHelper('json', function ($array) {
return Nette\Utils\Json::encode($array);
});
v šabloně
{$array|json}
Editoval HosipLan (13. 7. 2011 10:40)
- Filip Procházka
- Moderator | 4668
Zajímavé, pokud to jen potřebuješ vypsat v Javascriptu, tak mám pro tebe novinku :)
<script type="text/javascript">
var promenna = {$array};
</script>
Zkus to takhle :)
- ic
- Člen | 430
redhead napsal(a):
@ic: Dle dokumentace to není nutné.
Pokus omyl na mojí verzi ‚2.0-dev released on 2011–07–01‘ mě
vyšlo, že…
pro běžný třeba řetězec ne, ale pokud už asociativní pole projde php
funkcí json_encode(), tak ho tohle escapování jen zdemoluje
viz
data = {!$data}; //data = [{"nazev":"neco","www":"http:\/\/www.neco.cz", ...
//kdežto
data = {$data}; //data = "[{\"nazev\":\"neco\",\"www\":\"http:\\\/\\\/www.neco.cz\\\/\", ...
zvlášť teda ta adresa je lol
- Milo
- Nette Core | 1283
Pokud to pole proženeš přes json_encode()
, předáš do
šablony a použiješ ve <script>
tagu tak se to chová
správně, protože to escapuje řetězec aby byl bezpečně použitelný. Ale
pokud předáš do šablony asociativní pole, automaticky je z něj json
(objekt).
// Presenter
public function renderNeco()
{
$this->template->pole = array(
'key' => 'val',
'xxx' => 'yyy',
);
}
<!-- Šablona -->
<script>
var pole = {$pole}; // var pole = {"key":val,"xxx":yyy};
</script>
Editoval Milo (13. 7. 2011 21:17)
- ic
- Člen | 430
Milo napsal(a):
Pokud to pole proženeš přes
json_encode()
, předáš do šablony a použiješ ve<script>
tagu tak se to chová správně, protože to escapuje řetězec aby byl bezpečně použitelný. Ale pokud předáš do šablony asociativní pole, automaticky je z něj json (objekt).
Teď se na to dívám… máš pravdu díky.
To jsem úplně zbytečně používal tu json_encode()
, když ona
se použije sama a ani nemusím nic dělat… někdy je to až příliš
snadné XD