Prerušenie presenteru po ajax handle

Aris
Člen | 48
+
0
-

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();
}
David Matějka
Moderator | 6445
+
0
-

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
+
0
-

@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)

David Matějka
Moderator | 6445
+
0
-

tu snippetAreu bys mel dat nad cely form

Ondřej Kubíček
Člen | 494
+
0
-

podle mě v tomhle případě tam ani nemusíš mít snippetAreu, nebo ty do té šablony ještě něco includuješ?

Aris
Člen | 48
+
0
-

@OndřejKubíček máš pravdu, ide to i bez nej, nič viac tam neincludujem :) . Snažil som sa ísť podľa rád, ako by to mohlo fungovať. Ďakujem páni :) .