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 | 431
 
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 | 431
 
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