předávání php pole do JS v template
- Rampa
- Člen | 65
ahoj všem.
Pls poraďte jak nejlépe předat php pole do JS.
Zatím to řeším:
presenter:
<?php
$neco[0]=5;
$neco[1]=10;
?>
template:
<script>
neco={$neco};
</script>
a vloží se něco takovýhleho:
<script>
neco={"0":"5","1":"10"};
</script>
no a tady nastáva problem s uvozovkama, protože:
neco[0]+neco[1] ⇒ 510 !!!
a jsem linej pořád psat parseFloat(neco[0])+parseFloat[1])
jak se zbavím těch uvozovek? Zkoušl jsem {!neco},{=neco}… a nic… Nebo jak lépe předat pole do JS
Díky
//edit: velikosti písmen
Editoval Rampa (19. 3. 2010 11:08)
- toka
- Člen | 253
Máte pravdu, normálně to funguje.
Útržky:
...
public function renderDefault() {
$this->template->pole = array(1,2,3,4,5,6);
}
...
...
<script type="text/javascript">
/* <![CDATA[ */
var pole = {$pole}
/* ]]> */
</script>
...
Výsledek:
...
<script type="text/javascript">
/* <![CDATA[ */
var x = [1,2,3,4,5,6]
/* ]]> */
</script>
...
Nette Framework 0.9.3 (revision cc750ea released on 2010–01–28)
- Rampa
- Člen | 65
nette verze 0.9.3 s name php 5.3
A opravdu mi to dělá. Tady je realný výstup
template:
options={$options};
a ve zdrojáku je pak toto:
options={"owner":"1","build_priority":"71","auto_fill":"0","tax":"43","build_type":"0"};
jo a ještě maličkost. $options
je fetch přes dibi
z mySQL
Žádný helpery ani filtry tam nejsou. Akorát je to obalený @{block
main} kvůli layotu, ale to by s tím nemělo nic udělat.
//edit:
tak jsem si dal debug::dump($options) a hodilo mi to toto:
`object(DibiRow) (5) {
„owner“ ⇒ string(1) „1“
„build_priority“ ⇒ string(2) „71“
„auto_fill“ ⇒ string(1) „0“
„tax“ ⇒ string(2) „43“
„build_type“ ⇒ string(1) „0“
}
`
takže budu muset nějak dibi přinutit, aby to vrátil jako INT, tak jak je to
definováno v mySQL :(
Editoval Rampa (22. 3. 2010 13:22)
- toka
- Člen | 253
toka napsal(a):
Nevím proč, ale
$result->detectTypes();
mi nejde, ale když použiješ$result->setType('id',Dibi::FIELD_INTEGER);
, tak tato konstrukce nastaví sloupecid
jakointeger
. Proč dibi vracístring
, i když se jedná oint
, to netuším.
Jsem „blb“ :-) Nevím proč, ale testoval jsem to na verzi
dibi
0.9 (revision 152 released on 2008/10/10 03:35:33)
. To ještě bylo
dibi.compact.php
, namísto dnešního dibi.min.php
.
Nevím, jak se mi to připletlo do testovacího adresáře, taková historie.
S poslední verzí následující konstrukce samozřejmě funguje:
...
$result = dibi::query('...');
$result->detectTypes();
// Vypis s korektnimi typy
Debug::dump($result->fetch());
...