prace s ajaxem vlastnost v danou chvíli už neexistuje
- endy
- Člen | 18
Zdravím, Pokusím se svůj problém popsat podrobně. Vytáhnu si data z databáze a uložím do property. Tato data bych chtěl zpracovat a postupně posílat do šablony (po indexu) aniž by došlo k jejich změně (vykoná se nový dotaz do databáze). Proto jsem chtěl použít ajax, aby se znovu nevolala metoda render, kde data získávám z databáze. Takto mi to ale nefunguje po zavolání ajaxu je $this->words už null.
public function renderTest($id) {
$this->words = $this->courseManager->getWords($id);
$this->template->questions = $this->testManager->prepareQustions(0, $this->words);
}
public function handleContinueTest(){
$this->template->questions = $this->testManager->prepareAnswers(1, $this->words);
if($this->isAjax()){
$this->redrawControl('test');
}
}
- neznamy_uzivatel
- Člen | 115
Ukokončí se PHP, data zmizí – zavolání ajaxu už je nová instance,
kdy $this->words neylo nikdy naplněno..
Nevím, co je words – asi by to šlo v renderTest poslat do šablony a
v ajax požadavku si to poslat do handle..
Případně uložit do session..?
- jiri.pudil
- Nette Blogger | 1032
Ajax ne-ajax, pro server a PHP je to úplně nový request a všechno se vytváří zčerstva.
Doporučuji prostudovat životní
cyklus presenteru. Signály (handle
) se vyhodnocují
mezi action
a render
– a protože
do $this->words
nastavuješ data až v render
, v
handle
je tam ještě nemáš.
Taky pozor na to, že metoda render
se zavolá i při ajaxovém
požadavku (pokud tedy v handle
běh presenteru neukončíš) –
Nette pak jen zajistí, že se nevykreslí celá šablona, ale jen změněné
snippety. Takže si v render
metodě přepisuješ
$this->template->questions
nastavené v
handle
.