DependencySelectBox – Závislé SelectBoxy

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
dada-amater
Bronze Partner | 52
+
0
-

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.14

Presenter:
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
+
0
-

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
+
+1
-

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
+
0
-

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
+
0
-

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

kralik
Člen | 230
+
0
-

Ahoj všichni,
prosím nemáte někdo funkční demo pro Nette 2.1.5, případně Nette 2.2.3.

Bohužel se mi nedaří tento doplněk rozjet pod Nette 2.1.5.

Mooc díky

pata.kusik111
Člen | 78
+
0
-

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ě.

Foowie
Člen | 269
+
0
-

Nevím jestli to pomůže, ale nezkoušel si IDčka přetypovat na string?

pata.kusik111
Člen | 78
+
0
-

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
+
0
-

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?