Při použití replicatoru se nevolají metody custom prvku

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

Ahoj, mám takový zajímavý problém. Používám svůj doplněk pro selectize. Pokud ho ale použiju spolu s replicatorem, tak se použije základní nastavení toho prvku.

Abych to trochu vysvětlil. Základní nastavení je v DI extension a formulářový prvek registruju takhle.

Potom ve formuláři se to použije následně:

$container2->addSelectize('product', 'product', $this->productsDao->getBonduelles()->findForSelect(),
	[
		'create' => FALSE,
		'maxItems' => 1,
		'valueField' => 'code',
		'labelField' => 'name',
		'searchField' => ['code', 'name']
	]);

Mimo replicator to funguje naprosto v pohodě. Všechny hodnoty jsou nastavený z toho pole. Pokud ten prvek ale přesunu do replicatoru, tak se použije základní nastavení. Respektive použije se základní nastavení ve chvíli, kdy se odešle formulář (jakýmkoli tlačítkem). Nevolají se ani žádné metody, které ta třída Selectize má. Přijde mě, jako by to bylo pomocí extensionMethod v tu chvíli registrovaný jen napůl…

Nemá někdo tušení v čem by mohl být problém?

iNviNho
Člen | 352
+
0
-

Offtopic vieš mi ukázať ako to reálne funguje na nejakom webe, resp. čo to je?

Oli
Člen | 1215
+
0
-

@iNviNho jestli myslíš to selectize, tak je to přesně tohle: http://brianreavis.github.io/selectize.js/. V nasi administraci to je jeden z nejpoužívanějších doplnku :)

Btw. Nikdo neví v čem by mohl byt zakopan pes?

Oli
Člen | 1215
+
0
-

Tak jsem to opravil, ale stejně by mě zajímalo, proč to s replicatorem nefungovalo. Zavolal se jen konstruktor a pak už rovnou loadHttpData(). Bez použití replicatoru se provedla celá registrace, tzn Nette\Forms\Container::extensionMethod

LeonardoCA
Člen | 296
+
0
-

Rekl bych, ze sis neosetril inicializaci po pridani novych konteineru na strane javascriptu. Ja to delam pri pouziti nette.ajax.js pridanim sveho rozsireni kde inicializaci pustim pri prvotnim nacteni stranky a pak pri kazdem uspesnem ajaxovem requestu (obvykle je kod funkce init jednodussi, zkus prepsat selectize.js)

Druha moznost (rychlejsi pro test) je pridat si inicializici do inline js snipetu formulare, ale davam prednost externimu.js

Oli
Člen | 1215
+
0
-

Díky za reakci, ale tim to nebude ;-) S tímhle případem nemá JS dočinění. To co nastavuju je hlavně pro PHP. Js je v podstatě jedno jestli je klíč sloupec id nebo code. Další věc, spadlo by to v js konzoli, ale ne jako php error. A hlavně, zatím jsem to kvůli pohodlnějšímu debugování neposílal ajaxem, ale vykreslovala se celá stránka.

Btw. dělám to s tím nette.ajax.js taky :-)

$.nette.ext({
	load: function() {
		selectize();
		selectize(function (labelField, valueField) {
			return {
				item: function(item, escape) {
					return '<div>' + escape(item[labelField]) + (item[valueField] ? ' <span class="label label-default">'
					  + escape(item[valueField]) + '</span>' : '') + '</div>';
				},
				option: function(item, escape) {
					var label = item[labelField] || item[valueField];
					var caption = item[labelField] ? item[valueField] : null;
					return '<div>' +
					'<span>' + escape(label) + '</span><br>' +
					(caption ? '<span class="text-muted">' + escape(caption) + '</span>' : '') +
					'</div>';
				}
			};
		}, '.bonduelle-selectize');
	}
});

Editoval Oli (30. 3. 2015 19:22)

flexroad
Člen | 117
+
0
-

Ahoj,

delal jsem composer update a casti ktere pouzivaji selectize prestaly fungovat…

Hazi to chybu „array_replace(): Argument #2 is not an array“

na tomto radku link:

$container[$name] = new Selectize($label, $entity, array_replace($config, $options));

Komponentu jsem doposud vytvarel takto:

$form->addSelectize('tags', 'tags', $tags);

pricemz tags je Array:

array (5)
0 => array (3)
id => 1
name => "aaa" (5)
color => "c51a02" (6)
1 => array (3)
id => 2
name => "bbb" (5)
color => "c20a7c" (6)
2 => array (3)
id => 3
name => "ccc" (7)
color => "fc363f" (6)

V neonu mam potom:

selectize:
    mode: full # second mode is `select` for selection just 1 option
    maxItems: null
    delimiter: ','
    plugins:
        - remove_button
    valueField: id
    labelField: name
    searchField: name

Nejake napady jak to opravit, aby to slapalo s aktualni verzi?

Diky moc,

@flexroad

*edit:

Pokud to pouziju s puvodnim kodem pred opravou: link
vse funguje jak ma…!!!

Editoval flexroad (1. 4. 2015 15:38)

Oli
Člen | 1215
+
+1
-

@flexroad Fixed. Díky ;-)

Editoval Oli (1. 4. 2015 16:12)