Při použití replicatoru se nevolají metody custom prvku
- Oli
- Člen | 1215
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?
- Oli
- Člen | 1215
@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?
- LeonardoCA
- Člen | 296
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
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
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)