Název snippetu nebere proměnnou

Damo
Člen | 54
+
0
-

Přes Nittro si zavolám stránku pro překreslení snippetu.
Protože potřebuji dle id dynamicky vygenerovaného divu vložit právě obsah do toho kterého chci, tak si posílám id v dotazu aby se mi zpátky vrátil payload s právě se snipettem daného id.

Takže latte snippetu je

<div n:snippet="x-window-content-$id">
    {$id}
    <div class="wrapper">
	...

ale payload mi nic nevrati, zadny snippet. Když zadam id číslo přímo do snippetu tedy

<div n:snippet="x-window-content-30">
    {$id}
    <div class="wrapper">
	...

payload už je naplněn správně

$id je skutečně naplněno v presenteru, takto

	$this->template->id = $id;
    $this->postGet("this");
    $this->redrawControl("x-window-content-" . $id);

Co dělám špatně? Díky

nightfish
Člen | 468
+
0
-

https://doc.nette.org/…ication/ajax#…

Dynamické snippety nelze invalidovat přímo (invalidace item-1 neudělá vůbec nic), musíte invalidovat jim nadřazený statický snippet (zde snippet itemsContainer).

Damo
Člen | 54
+
0
-

Perfektni, snippet s id jsem obalil

<div n:snippet="itemsWindowContent">
	<div n:snippet="x-window-content-$id">
	    {$id}
    	<div class="wrapper">
		...
</div>

a změnil redrawControl na

$this->redrawControl("itemsWindowContent");

a už to funguje. Díky moc

Damo
Člen | 54
+
0
-

Tak ještě zpět, ačkoliv mi to funguje, tak se teď trápím s voláním Page.Open, kdy potřebuji načíst externí obsah přes nittro

Každou iteraci se v js zavolá Page.Open, ale ajax to nittro vystreli az na poslednim, tedy nezavola např. 5 ajaxu s id 1,2,3,4,5, ale zavola jen jeden ajax s id 5. Když to předělám do jquery $.get, tak to zafunguje, ten vystreli těch ajaxů 5.
Nevíte jak to v Nittro pošéfovat? Nenašel jsem ve wiki nic k tomu.

{foreach $windows as $window}
	...
	<div id="snippet--x-window-content-{$window->id}" class="card-body overflow-auto p-0">
		<p class="card-text">Loading...{$window->id}</p>
	</div>
	...

	<script type="application/javascript">
    	window._stack || (window._stack = []);
	    window._stack.push(function(di) {
    	    di.getService('page').getSnippet({snippet.id x-window-content-$window->id})
        	    .setup(function(elem) {
					// volam ajax pro naplnění snippetu, ale vystreli se pouze jednou
                	di.getService('page').open({$window->modulePath} + "?id={$window->id}", 'GET', null, { history: false });

					// toto funguje
	                {*$.get({$window->modulePath}, {"id" : {$window->id} }, function(data) {*}
    	            {*    $(elem).html(data["snippets"]["snippet--x-window-content-{$window->id}"]);*}
        	        {*});*}
            	})
	            .teardown(function(elem) {

    	        });
	    });
	</script>
{/foreach}