Dynamický závislý selekt – problém s „SetRequired“

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

Dobrý den, pánové.
Podstatnou část noci jsem se snažil do přihlašovacího formuláře (naspaného dle kuchařky) implementovat dva závislé selektboxy podle tohoto návodu: https://blog.nette.org/…-and-pure-js . Možná mi něco nedochází nebo to po té době už nevidím, ale mám problém s SetRequired na těch selektboxech. Pokud jsou ty selektboxy required, odeslání formuláře není validní (neprovede se onSuccess, ale onError) z toho mi vyplývá, že vybraná hodnota těchto polí není validní a já nemůžu přijít na to proč a kde se tomu tak děje. Pokud na těch selektboxech to require vyhodím, onSuccess se sice provede, ale mezi hodnotami formuláře z nějakého důvodu chybí checkbox remember a metoda spadne na ifu pro nastaveni expirace. Už nevím, co s tím dál. Poradíte mi někdo ?

Presenter:

// ------------------------------------------------------------------
/**
* Render formulare
*/
public function renderIn ($id) {
    if(!$this->isAjax()){
        $form = $this->getComponent("signInForm");
        if($id == null) {
            $id = 1; //Prvni zaznam
        }//end if
        $form["Game"]->setItems($this->gamesRepository->getGamesList());
        $form["Game"]->setDefaultValue($id);
        $form["GameVariant"]->setItems($this->gameVariantsRepository->getGameVariantsList($id ));
    }//end if
    $this->template->_form = $this['signInForm'];
}// end function

// ------------------------------------------------------------------
/**
* Ajaxove plneni hernich variant
*/
public function handleSelectLoad($gameId)
{
    $form = $this->getComponent("signInForm");
    $form["GameVariant"]->setItems($this->gameVariantsRepository->getGameVariantsList($gameId));
    $this->invalidateControl("form"); // invalidate ajax snippet
}// end function

// ------------------------------------------------------------------
	/**
	 * Sign-in form factory.
	 * @return Nette\Application\UI\Form
	 */
	protected function createComponentSignInForm()
	{
		$form = new UI\Form;
    $form->addSelect('Game','Hra:');
         ->setRequired('Vyber si hru.');

    $form->addSelect('GameVariant','Lokalita:')
         ->setRequired('Vyber si lokalitu.')
         ->setPrompt("Vyber si lokalitu");

		$form->addText('UserName', 'Nick:',25,30)
			 ->setRequired('Vložte herní přezdívku.')
         ->setAttribute('class','input-block-level')
         ->setAttribute('placeholder','Nick');
		$form->addPassword('UserPassword', 'Heslo:',25,30)
			 ->setRequired('Vložte heslo.')
         ->setAttribute('class','input-block-level')
         ->setAttribute('placeholder','Heslo');
		$form->addCheckbox('remember', 'Pamatovat přihlášení');
		$form->addSubmit('send', 'Přihlásit')
         ->setAttribute('class','btn btn-large btn-primary');

		// call method signInFormSucceeded() on success
		$form->onSuccess[] = $this->signInFormSucceeded;
		return $form;
	}//end function


// ------------------------------------------------------------------
/**
* Uspesne prihlaseni
*/
public function signInFormSucceeded($form)
{
    $values = $form->getHttpData();
    unset($values["send"]);

    if ($values->remember) {
        $this->getUser()->setExpiration('+ 14 days', FALSE, TRUE);
    } else {
        $this->getUser()->setExpiration('+ 20 minutes', TRUE, TRUE);
    }

    try {
		:
		:

Šablona:

{block content}
{* generovani prihlasovaciho formulare *}
{form signInForm}
<div class="form-signin">
    <h2 class="form-signin-heading">Přihlášení</h2>
    {input Game}
    {snippet form}
        {input GameVariant}
        <script type="text/javascript">
            $("form").delegate('#'+{$control["signInForm-Game"]->htmlId}, 'change', function() {
                $.get("?do=selectLoad", {"gameId": $(this).val()});
            });
        </script>
    {/snippet}
	{input UserName}
	{input UserPassword}
	<label class="checkbox">
		{input remember} {label remember /}
    </label>
    {input send}
</div>
{/form}
{/block}