formulář se nezpracuje ajaxem
- trta911
- Člen | 35
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.
- trta911
- Člen | 35
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> Zrušit úpravu</a>
{/if}
</form>
</div>
....
{/snippet}
</div><!-- TAB CATEGORIES -->
Editoval trta911 (16. 3. 2017 9:42)