Prerušenie presenteru po ajax handle
- Aris
- Člen | 48
Ahoj, je možné prerušiť presenter po handle – odoslaní snippetu korektne? Po volaní $this->terminate() za redrawControl nepríde žiadna (prázdna) response od servera.
Mám veľký formulár v ktorom je obaľovací snippet a menšie snippety pre kategórie a tagy. Po vytvorení tagov/categories v popup okne chcem refreshnúť iba jednotlivé snippety so zmenenými default values inputu categories tak aby som nezmazal už vyplnené hodnoty formulára. Je prípadne iné, krajšie riešenie?
public function createComponentExampleForm()
{
$this->redrawControl();
//redraw kvoli refreshnutiu snippetu v inych pripadoch
.....
}
public function editDefaults()
{
$new_cat_defaults = $this->categoryModel->selectCategories();
$this['receptyForm']->components['categories']->setItems($new_cat_defaults);
$new_tags_defaults = $this->categoryModel->selectTags();
$this['receptyForm']->components['tags']->setItems($new_tags_defaults);
}
public function handleDeleteCategories()
{
bdump($this->getHttpRequest()->post);
$categories = $this->getHttpRequest()->post['values'];
foreach($categories as $category)
{
$this->categoryModel->deleteCategory($category);
}
$this->editDefaults();
$this->redrawControl('cat-edit-box');
//$this->terminate();
}
- lightteka
- Backer | 17
Nesouvisi to s tímhle vláknem (Nette 2.4 – snippety ve formulari jako komponente) ?
- David Matějka
- Moderator | 6445
terminate pouzit nemuzes, musi dojit k vykresleni sablony, kde se zpracuji snippety.
nemas nekde (v render nebo tak) neco, co zapricini prekresleni vetsiho celku?
podrobneji o tom, jak funguji snippety, najdes v me prednasce z posoboty
- Aris
- Člen | 48
@lightteka je to niečo podobné. @DavidMatějka ďakujem, pozrel som si prednášku. Spracovával som viacero ajaxov render metóde, to však pôvodný problém nezmenilo iba sprehľadnilo kód a ušetrilo čas načítania, miesto celého formu prekreslím na istých miestach snippety.
Latte
{snippetArea editBox}
<div n:snippet="cat-edit-box">
<div class="col-md-4">
<h3 class="box-title">Kategórie</h3>
{input categories}
....
Dostávam chybu
<?php echo end($this->global->formsStack)["categories"]->getControl() /* line 76 */ ?>
//end() expects parameter 1 to be array, null given
public function handleDeleteCategories()
{
bdump($this->getHttpRequest()->post);
$categories = $this->getHttpRequest()->post['values'];
foreach($categories as $category)
{
$this->categoryModel->deleteCategory($category);
}
$this->editDefaults();
$this->redrawControl('editBox');
$this->redrawControl('cat-edit-box');
//$this->terminate();
}
public function editDefaults()
{
$new_cat_defaults = $this->categoryModel->selectCategories();
$this['receptyForm']->components['categories']->setItems($new_cat_defaults);
$new_tags_defaults = $this->categoryModel->selectTags();
$this['receptyForm']->components['tags']->setItems($new_tags_defaults);
//nakoniec vyriesenie iba pridanim nasledujuceho riadku
//$this->template->getLatte()->addProvider('formsStack', [$this['receptyForm']]);
}
Podarilo sa to vyriešiť pridaním
$this->template->getLatte()->addProvider(‚formsStack‘,
[$this[‚receptyForm‘]]);
Btw, viete mi prosím priblížiť dôvod tejto chyby? Po pridaní formsStack sa
snippetArea so snippetom bez problémov prekreslí. Používam Nette 2.4.
Editoval Aris (28. 11. 2018 16:36)
- Ondřej Kubíček
- Člen | 494
podle mě v tomhle případě tam ani nemusíš mít snippetAreu, nebo ty do té šablony ještě něco includuješ?