DependencySelectBox – Závislé SelectBoxy
- dada-amater
- Bronze Partner | 52
Co to hlasi?
kralik napsal(a):
Ahoj,
nějak si nevím rady a chtěl bych prosím poradit.
Bude to určitě nějaká prkotina, ale nemůžu na ni přijít.
Zkouším tuto komponentu s Nette 2.0.6. a PHP 5.4.14Presenter:
Funkční<?php protected function createComponentFormAddDoc($name) { $form = new UI\Form($this,$name); ... $form->addSelect('oddeleni', 'Oddělení', $odd); ->addRule(UI\Form::FILLED); $form->addJSelect('wf', 'Workflow', $form['oddeleni'], function($form) { $v = $form['oddeleni']->getValue(); return array("$v 10" => "$v 10", "$v 20" => "$v 20", "$v 30" => "$v 30"); }); ?>
Výše uvedené v pohodě funguje, ale když načtu data z Modelu, tak změná hodnot v závislém SB neproběhne.
Nefunkční
Presenter<?php protected function createComponentFormAddDoc($name) { $form = new UI\Form($this,$name); ... $form->addSelect('oddeleni', 'Oddělení', $odd); ->addRule(UI\Form::FILLED); $form->addJSelect('wf', 'Workflow', $form['oddeleni'], function($form) { $v = $form['oddeleni']->getValue(); $wf = $this->mainModel->getFormValWf($v); return $wf; }); ?>
mailModel
<?php public function getFormValWf($v) { return array("$v 10" => "$v 10", "$v 20" => "$v 20", "$v 30" => "$v 30"); } ?>
Moc díky za pomoc
- kralik
- Člen | 230
Bohužel nic, žádná chybová hláška
Edit: vyřešeno
Použil jsem \DependentSelectBox\DependentSelectBox::register(‚addDSelect‘); tedy ne json.
Presenter
<?php
public function getValuesWF($form, $dependentSelectBoxName) {
$mf = $this->mf;
$v = $form["oddeleni"]->getValue();
$wf = $this->mainModel->getFormValWf($mf,$v);
return $wf;
}
protected function createComponentFormAddDoc($name) {
$mf = $this->mf;
$form = new UI\Form($this,$name);
...
$form->addDSelect("wf", "Workflow", $form["oddeleni"], array($this, "getValuesWF"));
if($this->isAjax()) {
$form["wf"]->addOnSubmitCallback(array($this, "invalidateControl"), "jsonFormWf");
}
?>
Model
<?php
public function getFormValWf($mf,$v) {
$res = $this->connection->table("workflow")->select("id,namecz")->where("zavod", $mf)->where("oddeleni",$v)->fetchPairs("id", "namecz");
if(!$res){
$res = array("0"=>"Žádná položka");
}
return ($res) ? $res : FALSE;
}
?>
Ještě řeším správný formát datumu při použítí komponenty DateInput od Ondřeje Vodáčka, který se mi bohužel po vyvolání snippetu změní. A rozatím jak jej po snippetu změnit
Všem díky za čas.
Editoval kralik (16. 4. 2014 8:39)
- Richard Jedlička
- Člen | 51
Ahoj,
tento addon se mi líbí, ale zatím mi spíš přidělává práci. Mám dva
selectboxy, jeden závislý na druhém. Oba selectboxy mají nastavený prompt
(přes standardní setPrompt). Tedy ten závislý select má ve výchozím stavu
jednu hodnotu (ten prompt). U root selectu se mi ale vybírá automaticky
první hodnota (ne prompt). Jak docílit aby na začátku byly oba selecty
nastaveny na prompt a a teprve až když vyberu v prvním konkrétní hodnotu,
tak se ten druhý načte? Zkoušel jsem nastavit
$autoSelectRootFirstItem
takto:
<?php
$form->addDependentSelect('select', ...);
$form['select']->autoSelectRootFirstItem = false;
?>
ale nic se nestalo. Podle zdrojáků se metoda nastavující první prvek volá dřív než tu proměnnou nastavím.
Prosím poraďte. Dík Uiii
- mpis
- Člen | 65
Snažím se rozběhat doplněk DependencySelectBox, ale už jsem z toho
zoufalý.
Všechno vypadá jakože dobrý, ale po výběru položky v prvním selectu se
v závislém selectu nic nezmění,
jen to vyhodí chybu „TypeError: $(…).ajaxSubmit is not a function“ na
řádku 34 ve
scriptu jquery.nette.dependentselectbox.js.
Když tento script vyhodím, tak se zobrazí skrytý button,přes který to
funguje správně.
Už jsem na webu prolezl kdeco a pořád nemůžu přijít na příčinu.
Poradil by, prosím, někdo, čím to může být a jak tuto chybu
odstranit?
- mpis
- Člen | 65
Odpovídám si sám. Možná to někomu pomůže se rychleji dobrat
kýženého výsledku.
Pořadí přilinkovaných .js je následující:
<script src=„{$basePath}/js/nette.ajax.js“
type=„text/javascript“></script>
<script src=„{$basePath}/js/main.ajax.js“
type=„text/javascript“></script>
<script src=„{$basePath}/js/jquery.nette.dependentselectbox.js“
type=„text/javascript“ ></script>
<script src=„{$basePath}/js/dependentselectbox.ajax.js“
type=„text/javascript“></script>
Problém byl v tom, že se nette.ajax.js musí inicializovat!!!
Ještě že je to v dokumentaci explicitně popsáno.
Inicializace je v main.ajax.js
- pata.kusik111
- Člen | 78
Zdravím,
mám problém s pořadím položek, které jsem získal pomocí
JSONDependentSelectBoxu.
Všechno mám nastavené podle návodu, načítání položek funguje bezvadně,
nicméně je tu jeden problém.
Z databáze dostanu položky ve formě (id => name)
respektive (int => String)
, a z databáze mám pořadí podle
data přidání položky – to jest jiné než je pořadí
id
.
JSON se mi ze serveru pošle ještě taky ve správném pořadí – to vím,
jelikož jsem odchytil odpověď serveru a tu jsem rozparsoval.
Nicméně do funkce jsonResponse
v
dependentselectbox.js
už se mi dostane ve špatném pořadí, to
jest seřazeni podle id
vzestupně.
- pata.kusik111
- Člen | 78
Zkoušel, ukázalo se, že v JSONu se přenášejí jako
String
, ale jakmile se začnou zpracovávat na straně klienta, tak
se přetypují zpět na int
. Nicméně jsem našel, že podle
definice se nesmí spoléhat na pořadí prvků v JSON objektu. Vyřešil jsem
to tak, že jsem stáhnul JQuery rozšíření pro řazení a řadím znova na
straně klienta. Což se zdá jako jediné možné správné řešení.
- maros
- Člen | 16
Zdravím, zkouším rozchodit DependencySelectBox pomocí addonu
NasExt/DependentSelectBox. Pomocí dokumentace jsem provedl implementaci,
v console nemám žádnou chybu, vše mi chodí dobře až na to, že
v závislém select boxu jsou vypsány pouze hodnoty [object Object]. Když se
ale podívám komunikaci, tak přijde JSON dotaz, ve kterém jsou správné
hodnoty. Selectbox vykreslí správný počet položek, jen nemají správný
název.
Nevíte, v čem bych mohl mít chybu?