Nette ajax ne prekresleni ale prikresleni

dehtak
Člen | 113
+
0
-

Ahoj,
mam takovou otazku jde udelat nejak prikresleni nikoliv prekresleni.
Ma to bejt takova live edit stranka.
Proste klasickej vypis blocku

<div class="obal" n:snipet="block">
 {foreach Blocks as block}
<div class="obsah">block->obsah</div>
{/foreach}
</div>

<a n:href="addEmptyBlock!">Pridat blok</a>

Vim ze bych to mohl udelat tak, ze vypisu z databaze blocky a pridam tam prazdne pole a necham prekreslit. Tim padem se tam prida prazdny blok. Ale Co kdyz Uzivatel upravil text v predeslich blocich (tinymce …) ? Tak po prekresleni se mu tam nactou zase data z databaze.
Potrebuju pridat prazdnej blok tak, aby to neovlivnilo jiz vypsane bloky z databaze.
Pouzit javascript a dat to tam append ? Napada vas nejake reseni. Mimochodem je to komponenta , nikoliv Presenter.

Editoval dehtak (11. 10. 2020 11:34)

David Matějka
Moderator | 6445
+
0
-

naja (i nette.ajax.js) podporuji append pomoci specialniho atributu: https://naja.js.org/#…

dehtak
Člen | 113
+
0
-

no to je hezky ale handle prece nemuze vratit odpoved nebo jo ?

function haandleAddEmptyBlock(){
$this->template->render(__DIR__ . '/templates/emptyBlock.latte');
}
To je prece kravina

zkousel jsem to tak ze sem vytvoril prezenter kterej vrati jen tu prazdnou sablonu ale naja na to nejak nereaguje kdyz dam

naja.snippetHandler.addEventListener('afterUpdate', function() {

  console.log('after');

});

Reaguje to pouze na handle

Mimochodem neni ten naja navod v cestine ?

Nejak to nechapu s tim naja apendem mohl bys prosim prisim uvest strucnej priklad ?

Nebude lepsi pouzit jquery ajax a normalne tu sablonu vyhodit z prezenteru a dat jit tam prez append ?
Neni to hezky reseni ale je funkcni

Editoval dehtak (11. 10. 2020 14:02)

David Matějka
Moderator | 6445
+
0
-

v handle nic nerenderuj, pouzivej to jako snippety, jen tomu pridas ten atribut

<div class="obal" n:snippet="block" data-ajax-append="1">
 {foreach $blocks as $block}
<div class="obsah">{$block->obsah}</div>
{/foreach}
</div>

a v handle akorat

$this->redrawControl('block');
$this->template->blocks = [(object) ['obsah' => '']];
dehtak
Člen | 113
+
0
-

ono jo funguje diky moc, jsem zas o neco chytrejsi. 5 dni sem stravil na tom reseni.

Editoval dehtak (11. 10. 2020 14:45)