Ajax závislý select box(kuchařka) – nepředá se parametr
- Prochy
- Člen | 91
Zdarvim,
udělal jsem si závislý select box pomocí kuchařky.
A zasekl jsem se na předání parametru hodnoty vybraného selectu. Mám
následující:
@layout.latte:
{snippet form}
{control selectForm}
<script>
$("form").delegate('#'+{$control["selectForm-static"]->htmlId}, 'change', function(){
$.get({link selectLoad!}, {"id": $(this).val()});
});
</script>
{/snippet}
HomePagePresenter:
public function handleSelectLoad()
{
if($this->isAjax()){
$form = $this->getComponent("selectForm"); // our form
$newArray = array(
$this->getParam('id'),
);
$form["dynamic"]->setItems($newArray); // set up new values
$this->invalidateControl('form');
}
}
Snažil jsem se to natvrdo dostat přes getParam, ale bohužel to pole je
prázdný. Když jsem tam zkusil dát getParam(‚do‘), tak to vyhodí
selectLoad, ale nevim proč to id nic nevyhodí. Zkoušel jsem ve firebugu
zjistit, jaký data se odesílají a id se tam
předává:?do=selectLoad&id=2.
Takže nechápu, jaktože to není schopný to id převzít v tom presentru. Za
pomoc budu velmi rád.
- Prochy
- Člen | 91
Nakonec jsem si to vyřešil následovně:
$.get({$basePath}+'/homepage/default/'+$(this).val()+'?do=selectLoad');
Snažil jsem to udělat následovně:
$.get({link selectLoad!,id=>$(this).val()});
Ale bohužel se mi nepodařilo zjistit, jak se přenáší do latte zápisu
proměnná z jquery. Tak si prozatím musim postačit s tímhle.
- Tomáš Votruba
- Moderator | 1114
Prochy napsal(a):
Snažil jsem se to natvrdo dostat přes getParam, ale bohužel to pole je prázdný. Když jsem tam zkusil dát getParam(‚do‘), tak to vyhodí selectLoad, ale nevim proč to id nic nevyhodí. Zkoušel jsem ve firebugu zjistit, jaký data se odesílají a id se tam předává:?do=selectLoad&id=2.
Takže nechápu, jaktože to není schopný to id převzít v tom presentru. Za pomoc budu velmi rád.
Ahoj, píšeš, že id se předává, což je obvykle stěžejní problém
(na js tedy nic měnit nemusíš). Metoda handleSelectLoad()
by
měla přijímat id:
public function handleSelectLoad($selectId) // pozor, zda v url již nemáš $id, např. edit/32 apod.
{
dump($selectId); // v tvém případě 2
}
Doporučuji debugovat tak, že si do adresy dáš
?do=selectLoad&id=2
a budeš testovat, zda se formulář nějak
změnil, či ne.
- Prochy
- Člen | 91
Tak závislost mi už funguje. Ale po odeslání formuláře se neuloží proměnný. Prostě když dám getValue u toho závislýho selectu, tak to vyhodí null. Zatím to řeším pomocí persistetní proměnný, kde nastavuju hodnoty toho selectu, aby se následně při refreshi objevili v továrničce. Ještě mě napadlo řešit to celý pomocí ajaxu, ale nevim jak předat všechny hodnoty inpůtu v jquery.
- Tomáš Votruba
- Moderator | 1114
Prochy napsal(a):
Tak závislost mi už funguje. Ale po odeslání formuláře se neuloží proměnný. Prostě když dám getValue u toho závislýho selectu, tak to vyhodí null. Zatím to řeším pomocí persistetní proměnný, kde nastavuju hodnoty toho selectu, aby se následně při refreshi objevili v továrničce. Ještě mě napadlo řešit to celý pomocí ajaxu, ale nevim jak předat všechny hodnoty inpůtu v jquery.
Tohoto sis v kuchařce všiml?
/**
* Shows values from selects
* @param form
**/
public function selectFormSent(Form $form)
{
$values = $form->getHttpData(); // getValues() is not enough for $form["dynamic"]
unset($values["send"]); // we don't need this
// save values...
}