Problém DependentSelectbox – nechtěný submit

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

Zdravím, na úplný konec se mi podařilo rozchodit nějakým způsobem. Rendruji si formulář sám, tudíž jsem si tam submit button vložil ručně.
Můj problém jest v tom, že ve formuláři mám x prvků a při každé změně selectboxu se mi validuje formulář a hlásí mi, kde co nemám vyplněné a koneckonců, pokud doplním vše, tak se mi odesílá, což je nesmysl.

Při změně selectboxu se mi odešle formulář a vyhodí to samo sebou exception Page not found. Missing template ...... add.latte, kde add je callback při konečném odeslání formuláře.
Nevím, zda jsem někde něco zapoměl nebo či co a proč, ale radši sem hodím náhledy..

presenter: http://pastebin.com/z7ixKHVG

část formu: http://pastebin.com/RUiJQnhY

část template: http://pastebin.com/mZ2TppsH

Díky za help

Editoval Jack06 (21. 9. 2011 11:56)

JakubJarabica
Gold Partner | 184
+
0
-

Tvoj problém je, že definuješ pre form onSuccess. Ten sa totiž volá pri každom odoslaní formulára, čo je aj refresh hodnôt. Vypni si JS a uvidíš pri selectboxoch buttony na load – čiže pre zmenu hodnôt sa form submitne(len sa volá handler dependentselectboxu na naplnenie). A zároveň sa volá aj tvoj handler.

Riešenie je $form->onSuccess nahradiť za $form[‚ok‘]->onClick, čím obmedzíš volanie add/edit len kliknutím na submit ‚ok‘, nie vždy.

Nox
Člen | 378
+
0
-

Bude pak fungovat enter? Momentálně to mám jako

<?php
public function successHandler(...) {
	if( $form[/* dependantSelectBox název */'_submit']->isSubmittedBy() )
		return;
}
?>

nevim jestli je to lepší, jestli funguje enter i při ->click tak asi bude lepší to

Jack06
Člen | 168
+
0
-

Ok upravil jsem toto:

$this->addSelect('region', NULL, $region)
        ->setPrompt('-- Region --');

$this->addJsonDependentSelectBox('okres', NULL, $this['region'], callback($this, "getValuesSelectOkres"))
        ->setPrompt('-- Okres --');

if ($this->presenter->isAjax())
    $this["okres"]->addOnSubmitCallback(array($this->presenter, "invalidateControl"), "schoolPlace");

a toto:

public function createComponentAdd($name) {
    $form = new TypesForm($this, $name);
    $form['send']->onClick[] = array($form, 'add');

}

nicméně mě to při výběru selectu vyhodí js alert, že nemám vyplněný některé z povinných polí a na samostatný ajax požadavek k závisloti selectboxů se nedostane, jo jinak celý form jsem dal do snippetu schoolPlace

// ok, zjistil jsem, že se to dostane k tomu isAjax ve formu, ale ta metoda addOnSubmitCallback nereaguje, nic se neprovede, snippet se nerefreshuje nic, když do toho isAjax dám ručně setItems a invalidateControl, tak to frčí

//tak fajne, další postup, nyní jsem se dostal o kousek dále, nyní mi to hlásí:

Call to undefined method DependentSelectBox\JsonDependentSelectBox::getPresenter(). search►

co to znamená samo sebou vím, ale jaksi se mi nedaří přistoupit k presenteru z dané classy

Editoval Jack06 (21. 9. 2011 15:28)

Jan Endel
Člen | 1016
+
0
-

Trošku se upravilo API v novém Nette, pro přechod je potřeba tento commit

Foowie
Člen | 269
+
0
-

Upraveno v originálním repozitáři. https://github.com/…entSelectBox

POZOR ! Nyní se musí volat JsonDependentSelectBox::tryJsonResponse($PRESENTER);

Editoval Foowie (21. 9. 2011 20:03)