Include blocku v JS a parametry

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
lucass
Člen | 89
+
0
-

Zdary,

mějme následující:

<script type="text/javascript">
	$.each({$array}, function(i, item) {
		var detail = $('{include #item, id => "' + item.id + '"|trim|escapeJs}');
	});
</script>

dále pak HTML:

{define #item}
    <div class="item">
	id: {$id}

	<a href="{plink Detail:default, id => $id}" class="modal">Zobrazit</a>
  </div>
{/define}

Vygenerované HTML je pak:

<div class="item">
	id: 1

	<a href="/item.detail/default/%27%20%2B%20item.id%20%2B%20%27?lang=cs">Zobrazit</a>
</div>

Tj. v případě výpisu dostanu správné číselné ID, v případě generování odkazu název proměnné v JS.

Buď špatně formátuji ten include v JavaScriptu, nebo se jedná o chybku. Můžete někdo poradit, jestli dělám něco špatně, nebo zda existuje workaround?

Nette Framework 2.0 pro PHP 5.3

Editoval lucass (31. 3. 2012 21:00)

Lopo
Člen | 277
+
0
-
{plink Detail:default, 'id' => $id}

pripadne

{plink Detail:default, $id}

pripadne

{plink Detail:default $id}

dufam ze staci :)

lucass
Člen | 89
+
0
-

Lopo: Díky za reakci, ale asi si nerozumíme. Jde o to, že $id se při přímém výpisu jako {$id} vypíše správně, ale v případě generování odkazu tak, jak by uvedeno v parametru pro include blocku, tj. ‚item.id‘.

Tvé doporučení nemá na generování odkazu žádný vliv, tj. {plink Detail:default, id ⇒ $id} generuje stejný chybový odkaz jako tvé tři alternativy.

nanuqcz
Člen | 822
+
0
-

Ahoj, ten tvůj

{include #item, id => "' + item.id + '"|trim|escapeJs}

se ti přeloží jako

<?php Nette\Latte\Macros\UIMacros::callBlock($_l, 'item', array('id' => "' + item.id + '") + $template->getParameters()); ?>

V době kompilace .latte totiž nelze zjistit, co bude v javascript proměnné item.id. Takže to, co bys chtěl, ani fungovat nemůže.

Můžete někdo poradit, jestli dělám něco špatně, nebo zda existuje workaround?

V latte je potřeba použít PHP (latte) proměnnou, místo javascriptové ;-)

Lopo
Člen | 277
+
0
-

lucass napsal(a):

Lopo: Díky za reakci, ale asi si nerozumíme. Jde o to, že $id se při přímém výpisu jako {$id} vypíše správně, ale v případě generování odkazu tak, jak by uvedeno v parametru pro include blocku, tj. ‚item.id‘.

Tvé doporučení nemá na generování odkazu žádný vliv, tj. {plink Detail:default, id ⇒ $id} generuje stejný chybový odkaz jako tvé tři alternativy.

a jo … sorac … som bol akuratne vylezeny z pelechu tak som riadne nevidel/nerozmyslal :)

jaky vystup vlastne ocakavas ?

lucass
Člen | 89
+
0
-

nanuqcz napsal(a):

V době kompilace .latte totiž nelze zjistit, co bude v javascript proměnné item.id. Takže to, co bys chtěl, ani fungovat nemůže.

Díky za reakci. Nicméně jak je tedy možné, že v případě výpisu přes {$id} ve stejném bloku, ve kterém se i generuje ten odkaz, to správné ID z JS proměnné vypíše?

lucass
Člen | 89
+
0
-

Lopo napsal(a):
jaky vystup vlastne ocakavas ?

Pokud mi {$id} vypisuje správně např. číslo 1, tak očekávám to samé číslo i při generování odkazu, tj. namísto

<div class="item">
        id: 1

        <a href="/item.detail/default/%27%20%2B%20item.id%20%2B%20%27?lang=cs">Zobrazit</a>
</div>

toto

<div class="item">
        id: 1

        <a href="/item.detail/default/1?lang=cs">Zobrazit</a>
</div>
nanuqcz
Člen | 822
+
0
-

Nicméně jak je tedy možné, že v případě výpisu přes {$id} ve stejném bloku, ve kterém se i generuje ten odkaz, to správné ID z JS proměnné vypíše?

Přiznám se, to je pro mě záhada :-/