Kdyby replicator – při smazání poslední položky vytvořit novou

kleinpetr
Člen | 480
+
0
-

Zdravím,

snažím se vyřešit problém s tím, když uživatel smaže poslední položku z dynamicu, aby se vytvořila jedna nová prázdná.

Ve formu si volám callback na presenter, který invaliduje snippety a hlídá počet komponent v kontejneru, mám následující podmínku

if (count($form['items']->components) == 1) {
	$form['items']->createOne();
}

Problém je, že mi vyhodí chybu
Container with name '0' already exists

Když ještě udělám podmínku na

if (count($form['items']->components) == 1) {
	if(!isset($form['items'][0])){
		$form['items']->createOne();
	}
}

Stane se to, že při smazání poslední položky mi tam zkrátka zůstane vyplněná, tak jak byla.

Řešil jste někdo tento problém ? Nebo má Replicator nějaké nastavení aby vždy zůstavala jedna položka ?

Předem díky za pomoc.

Pavel Kravčík
Člen | 1181
+
0
-

Při vytváření se dává jako poslední parametr číslo kolik se jich defaultně ukáže. Tam stačí dát jedničku. My ještě děláme následující podmínku do ručního vykreslení foreache – pro první iteraci skryjeme tlačítko pro smazání.

Martk
Člen | 655
+
0
-

@PavelKravčík Nevidím v kódu nikde podmínku na větší, menší aby se zabránilo odstraňování. Vytvoří ti to ze začátku jeden, ale můžeš ho následně odstranit. Možná se pletu…

@kleinpetr budeš muset předat parametr name a musí být unikátní nebo můžeš vyzkoušet opravený replikátor (původně jsem chtěl poslat pr, ale kód je změněný od podlahy). Je tam na to metoda setMinCopies, můžeš odstraňovat kterýkoliv kontejner (každý kontejner má vlastní odstraňovací tlačítko, proto doporučuji používat makra btnRemove, která kontroluje existenci tlačítka) a jakmile bude minCopy == aktuálním kopiím, tlačítka se odstraní.

Kdyby něco nefungovalo, tak stačí poslat issue a podívam se asap.

Editoval Martk (11. 11. 2017 16:30)

Pavel Kravčík
Člen | 1181
+
0
-

@Martk: Proto jsem tam připojil tu část s ručním vykreslením. Pak ten jeden nejde nikdy smazat.

kleinpetr
Člen | 480
+
0
-

@PavelKravčík Jasný to je klasika, ale jde mi o jinou věc. Mám položky trochu rozsáhlejší a potřebuji takové chování, že když se klikne na remove u poslední zbylé položky, tak se má „jakoby vynulovat“ a odstranění všech položek je možné z více akcí, ne jen jedním buttonem remove, proto volám jednotný callback při změně položek a tam jsem chtěl hlídat počet komponent v kontejneru a když se dostane na 1 (jelikož tam je i addButton), tak vytvoří jednu novou, tudíž to pak z client-side vypadá, že se vynulovala a řádky jsou prázdné.

Problém je ale v tom, že mi právě hází, že komponenta s name 0 již existuje. Nevím proč, protože když si dumpnu ten kontejner, tak jediný co je v components, je addButton, v kontejneru jsou ještě další věci, jako např. created, které taky obsahují zdá se položky, které předtím existovali, proto jsem z toho chování trochu zmatený.

@Martk Díky za tip, jen nevím jestli mi přesně pomůže s tímto problémem.

kleinpetr
Člen | 480
+
0
-

@FilipProcházka Nenapadá tě něco ? Jsem z toho už bezradný.

Díky