Předání další proměnné šabloně z komponenty ajaxem

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

Zdravím, neví někdo prosím jak předad další promenné šabloně z komponenty při updatu seznamu ajaxem,
po editu zaznamu řádku tabulky mám

$this->presenter->redrawControl('list')

a potřeboval bych mu předad taky dalši data npř: $row

$this->template->row = $this->id;

at ví s kterým řádkem pracujem;
z presenteru to samozdřejmě jde ale z komponenty už ne! neví někdo jak nato? díky za rady

akadlec
Člen | 1326
+
0
-

a proč by to jako nemělo jít v komponentě? Jen si to tedy musíš předávat do té správné šablony.

marcelxy
Člen | 70
+
0
-

dik za radu ale jak to mám napsat? do té správné šablony? podle čeho on jako vi do jaké šablony to má předat?

Editoval marcelxy (6. 6. 2014 18:51)

Oli
Člen | 1215
+
0
-

Možná ti pomůže přednáška Honzy Tvrdíka

marcelxy
Člen | 70
+
0
-

jo tu sem viděl xkrát jsem začátečník on tam řeší komponenty ne práci z ajaxem to je ještě trušku jiná liga! takže prostě nevím jak mám proměnnou poslat do snippetu? po updatu.

$this->presenter->redrawControl('list')

do snippetu list potřebuji dostat další proměnnou, z presentru to jde z komponenty už ne!

Oli
Člen | 1215
+
0
-

Možná začínám tušit o co ti jde. Nesnažíš se dostat proměnnou z komponenty do šablony presenteru? To nejde přímo zavoláním $this->template. Musíš si to předat nějakým getem. např

public function actionDefault()
{
	$this->template->row = $this['tvaKomponenta']->getId();
	$this->presenter->redrawControl('list');
}

public function createComponentTvaKomponenta()
{
	return new NS\Komponenta();
}

Nebo ti jde o něco jiného?
marcelxy
Člen | 70
+
0
-

no to není přesně to co řeším má komponenta je samostatná třída dědící od controlu je to form který ukládá a updatuje data! nic víc . v presenteru vytvářím jen jeho instanci kterou ajaxem posilám do snippetu toho daného presenteru. v něm mu můžu předávat další proměnné a vše funguje! ale po odeslaní dat a uložení což už nedělá presenter ale komponennta se pak potřebuji vrátit updatovaný snipet spět což činím

$this->presenter->redrawControl('list')

protože v presenteru by stačilo napsat

$this->redrawControl('list')

ale potřebuji mu předat další proměnnou do toho snippetu ze stejného mista ve stejném čase ale z té komponenty mi to už nejde! zápis:

$this->template->row = $this->id;

je muj nefunkční výmysl!potřebuji mu nějak řict aby tu $this->id poslal do toho snippetu ‚list‘,ale nevim jak??celý zápis vypadá takto: je to metoda komponenty ne presenteru!

public function addRow($form){

   $values = $form->getValues();

   if ($this->id) {
       $post = $this->conect->table('test')->where('id',$this->id);
       $post->update($values);
       $this->template->row = $this->id; //toto nefunguje!! zbytek ano!
                                          // a nevím jak ten $row do toho snippetu 'list' s tohoto mista poslat??
       $this->presenter->redrawControl('list') ;
   } else {
   $this->conect->table('test')->insert($values);
   $this->redirect('this');
    }
   }

Editoval marcelxy (7. 6. 2014 6:40)

marcelxy
Člen | 70
+
0
-

uplně nejednoduchší by asi bylo kdybych se po updatu mohl jednoduše vrátit do presenteru na metodu

public function handleEdit($id)
    {

   $this->id = $id;
   $this->row = $this->id;
   $this->formEdit = $this->getComponent('formEdit');
   $this->redrawControl('list') ;

     }

která vše co potřebuji umí!ale z komponenty se po uložení dat spět do presenteru na tu metodu sice jde dostat ale on už pak mi neodešle updatovaný snippet ale hledá celou šablonu handleEdit! která samozdřejmě nexistuje nebot jde o jen o update snippetu!

Editoval marcelxy (7. 6. 2014 7:43)

akadlec
Člen | 1326
+
0
-

Hledáš v ajaxu nějakou magii která tam není. Ajaxový request je téměř identický s klasickým jen s tím rozdílem že se provede na pozadí. Co vše se pošle uživateli zpět je na tobě, buď vyrenderuješ celou stránku nebo si pošleš jednotlivé snippety.

Stále si neurčil „KAM“ chceš ty proměnné dostat. Zda do šablony komponenty nebo do presenteru a kde se o to snažíš, podle toho se upraví volání.

Třeba předání proměnné do komponenty:

public function actionNeco()
{
	$this['nazevKomponenty']->setValue($value);
}

a měl by sis ujasnit co je co v nette, do snippetu opravdu nic nepošleš, je to jen „výstžižek“ šablony. Takže si ujasni kde se ti vykresluje to kam chceš poslat to ID, zda v komponentě nebo presenteru, ale pokud je to zpracováno v komponentě tak by ti to měla vykreslit komponenta a pak bys ten snippet měl mít v komponentě a né presenteru a tudíž bys pak měl volat redraw v dané komponentě.

Editoval akadlec (7. 6. 2014 10:59)