formulář se nezpracuje ajaxem

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

Ahoj, mám ručně renderovaný formulář, ale nedaří se mi ho odesílat ajaxem. Nette mám 2.4 a nette.ajax.js ve verzi 2.3.0 (takže asi taky aktuální z githubu). Před tím jsem používal verzi js 2.0.0 kde to frčelo dobře ale zas nejela validace :)

Zde je můj formulář a jeho zpracování v presenteru:

protected function createComponentCategoryForm()
{
    $categories = $this->nestedmenu->get_select();

    $form = new UI\Form;
    $form->addHidden('id');
    $form->addSelect('category_id', 'Kategorie:', $categories)->setPrompt('Vyberte kategorii')->setRequired('Je třeba vybrat Kategorii');
    $form->addSubmit('submit')->setValue('Vložit do kategorie');
    $form->onSuccess[] = [$this, 'categoryFormProcess'];

    return $form;
}

public function categoryFormProcess(UI\Form $form, $values)
{
    $productID = $this->getParameter('id');
    $rowID = $values['id'];
    if(!empty($rowID))
    {
        $this->database->table('product_categories')->where('id',$rowID)->update($values);
        $this->flashMessage('Kategorie produktu úspěšně upravena', 'success');
    }
    else
    {
        $values['product_id'] = $productID;
        $this->database->table('product_categories')->insert($values);
        $this->flashMessage('Kategorie produktu úspěšně přidána', 'success');
    }

    $this['categoryForm']->setValues([], TRUE);
    $this['categoryForm']['submit']->setValue('Vložit do kategorie');

    $this->redrawControl('flashMsg');
    $this->redrawControl('categoryTab');

    if (!$this->isAjax())
    {
        $this->redirect('this#tab_categories');
    }
}

a v šabloně pak mám klasický

<form n:name="categoryForm">
....
<input n:name="submit" class="ajax">
</form>

Zkoušel jsem dávat třídu ajax na celý form ale bezúspěšně. Vždy se udělá redirect bez zpracování ajaxem. Děje se to ale jen u formuláře, ostatní handleXXX metody fungují v pohodě. Co tady může být špatně?

Děkuji.

johnnie
Člen | 54
+
0
-

Ahoj,

neviem coho sa chytit tak zacnem od zaciatku. Mas to obalene v snippete ? pripadne neni to includovana sablona v sablone ? Ak ano treba SnippetArea

CZechBoY
Člen | 3608
+
0
-

Jak inicializujes nette.ajax? Nemas v konzoli prohlizece nejaky chyby?

trta911
Člen | 35
+
0
-

Formulář mám obalený ve snippetu který v presenteru překresluji – viz níže a nette.ajax inicializuji klasicky přes

<html>
<body>
    <script src="...../js/nette.ajax.js"></script>
    <script src="...../js/spinner.ajax.js"></script>
    <script>
         $(function () {
        $.nette.init();
});
        </script>
</body>
....
/include content/
</html>

v @layout.latte.
A je pravda, že mi to do konzole píše že „Nette is not defined“. Pokud blok inicializace ajaxu přesunu přímo do edit.latte úplně na začátek, tak mi sice už žádná chyba do konzole nevyskočí, ale formulář se stejně odesílá klasicky neajaxově. Šablona v šabloně to není, resp. je to klasický @layout.latte → a v ní mám include content a ten se načítá z edit.latte (definováno přes {block content}

        {snippet categoryTab}
        <div class="well">
            <form n:name="categoryForm" class="form-inline">
                <div class="form-group">
                    <label for="exampleInputName2">Název kategorie:</label>
                    <select n:name="category_id" class="form-control">
                        {foreach $form[category_id]->items as $key => $label}
                            <option n:name="$key">{$label}</option>
                        {/foreach}
                    </select>
                </div>
                <input type="submit" n:name="submit" class="btn btn-primary ajax" value="{$form[submit]->value}">
                {if !empty($categoryRowID)}
                    <a class="btn btn-danger ajax" n:href="cancelEditCategory!"><i class="fa fa-times"></i>&nbsp;&nbsp;Zrušit úpravu</a>
                {/if}
            </form>
        </div>
....
        {/snippet}
    </div><!-- TAB CATEGORIES -->

Editoval trta911 (16. 3. 2017 9:42)

Mysteria
Člen | 797
+
+2
-

A máš v layoutu přilinkované jQuery a NetteForms.js, které jsou nutné?

Editoval Mysteria (16. 3. 2017 9:48)

trta911
Člen | 35
+
0
-

@Mysteria Díky, o tom netteForms jsem až tak úplně nevěděl, teď jsem to tam přihodil a jede to. :-)