DependentSelectBox, callbacky a žádný výsledek

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

Mám následující problém:

Používám DependentSelectBox, odstranil jsem uses a namespaces. Stačí mi ne-js funkčnost, nenahrál jsem tedy .js soubory, nemám v šabloně zavináče. Demo z addonu mi na lokalhost funguje v pořádku, se zapnutým javaskriptem i bez.

Problém:
Předpokládám, že nějak špatně mixuju standartní formulář a tenhle addon. Po kliknutí na tlačítko „load“, které addon vyhodí pod „select2“, dojde k „refreshi“, „xxxxx“ v selectboxu se změní na ----- (! – něco z DependentSelectBox tedy v důsledku je zavoláno) ale jinak nic.

Nedojde k načtení dat (které má být v callbackové funkci), ani nevypadne flash zpráva, kterou jsem si tam dal abych otestoval, zda se funkce, na kterou má směřovat callback, vůbec volá.

Je tam vidět pro zkušené oko nějaká zjevná chyba? Copy-Paste úlet? Nebo pátrám na špatném místě? Musí tam být .js soubory funkčnost tohohle doplňku i když javascript nechci zatím využívat? Blbě používám tenhle addon v normálním formuláři?

Env:
PHP 5.2, xampp, win

PRESENTER:

<?php
public function createComponentBindCompanyForm()
{
$form = new AppForm;

$selectGameRuns = array();
// snip.. naplněni pole prvního selectboxu


$form->addSelect('selectedGameRun', 'Firmy z běhu hry:', $selectGameRuns)
        ->addRule(Form::FILLED, 'Musíte vybrat některý běh hry!')
        ->skipFirst();


$form->addDependentSelectBox("select2", "Výběr 2", $form["selectedGameRun"], callback($this, "fillValuesSelect2"));


    $form->addSubmit('save', 'Přiřadit')
        ->onClick[] = array($this, 'onClickSave');

    $form->addSubmit('back', 'Zpět')
        ->setValidationScope(FALSE)
        ->onClick[] = array($this, 'onClickBack');

    $form->addProtection('Prosím odešlete formulář ještě jednou (vypršel bezpečnostní token).');

  return $form;
}


public function onClickSave(SubmitButton $button)
{
 // snip...
 // toto funguje.
}

 public function onClickBack()
  {
  // snip...
  // toto funguje.
  }


public function fillValuesSelect2($form) {
 $this->flashMessage("Je to tu");
 //snip.. naplnění submitu select2 podle vybrané hodnoty v selectedGameRun

 // flashMessage se nezobrazi. Proč?



}
?>

ŠABLONA:

<?php

{block form}
 {widget bindCompanyForm}
{/block}

?>
Foowie
Člen | 269
+
0
-

Buď použij

public function createComponentBindCompanyForm($name) {
	$form = new AppForm($this, $name);

a nebo odeber ->skipFirst(); z selectedGameRun

To první doporučuju dělat u každé komponenty/formu a to druhé jsem asi ještě neřešil.

Editoval Foowie (2. 10. 2010 12:35)

Hissun
Člen | 9
+
0
-

Díky Foowie, status = SOLVED :-)

  1. skipFirst() potřebuju – Form::FILLED a první hodnota „– vyberte –“.

nicméně pro ověření zakomentováno a nebylo to ono. Imho tohle by to ani způsobovat nemělo, jde přece o validaci na konrétním selectboxu, nemělo by se to v důsledku hádat s callbackama.

  1. upravený konstruktor AppForm($this, $name) zabral. To jsem opravdu za celý den neviděl a ani bych na to nepřišel.

dodatek: předpokládám, že tím, že jsem to tam neměl (a $name se dosazuje právě tím widget makrem), tak ležel tenhle formulář mimo „strom komponent“ a tak ho addon DependentSelectbox nedokázal vidět (anonymní formulář). Předpokládám správně? Ať je z toho i poučení, ne jenom vyřešení :-)

Editoval Hissun (2. 10. 2010 11:25)

Foowie
Člen | 269
+
0
-

Nahrál jsem tam trošku upravenou verzi, která to skipFirst řeší ;) (Ale $form = new AppForm($this, $name) používej stále ;)

Btw: ten formulář se připojuje automaticky, pokud používáš továrničku. Proč to dělá neplechu bez okamžitého připojení do stormu komponent si nejsem jist (nějakou konspirační teorii mám v hlavě, ale není čas jí otestovat).