Ajax a select z databáze, mazání položek ze seznamu

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

Ahoj,
omlouvám se za dotaz, který už tu byl nejspíš zodpovězen.

Začínám s AJAXem a Nette obecně.Mám seznam, ve kterém bych rád mazal položky, které jsou uloženy v DB. Pro jednoduchost chci překreslit celý seznam, vím že by to šlo udělat efektivněji…

<ul n:snippet="answerList">
    {foreach $answers as $answer}
        <li>{$answer->text} <a class="ajax" n:href="delete! $answer->id">smaz</a></li>
    {/foreach}
</ul>

V presenteru:

	private $answers;

public function __construct(Model\Answers $answers) {
    $this->answers = $answers;
}

public function renderDefault() {
    if (!isset($this->template->answers)){
        $this->template->answers = $this->answers->findAll();
    }
}

public function handleDelete($answerId){
    $this->answers->delete($answerId); //záznam se z DB smaže
    $this->template->answers = $this->answers->findAll(); // asi vrátí prázdný počet řádků
    $this->redrawControl('answerList'); //a list je prázdný
}

Předem děkuji za veškerou pomoc

ali
Člen | 342
+
+1
-

v handle metode nemusis predavat do template nic, o to se stara render metoda

Pix
Člen | 5
+
0
-

Dobrá, řekněme že už nic nepředávám…

Podle mého posledního výzkumu se místo

SELECT `id`, `text`
FROM `answers`

Provede

SELECT `id`
FROM `answers`
WHERE (`id` = '2') //id smazane polozky

Mám tedy něco špatně s modelem?

/** @var Nette\Database\Context */
private $database;

public function __construct(Nette\Database\Context $database) {
    $this->database = $database->table("answers");
}

public function findAll() {
    return $this->database;
}
trejjam
Backer | 65
+
0
-

Zkus nám ukázat větší kus modelu, myslím, že chyba bude tam.

David Matějka
Moderator | 6445
+
+1
-
$this->database = $database->table("answers");

nepouzivej. Uloz si database a ->table(...) si zavolej pokazde znovu, aby ti to vytvorilo instanci selection znovu…

Pix
Člen | 5
+
0
-

Jéé :)
Mockrát děkuji, teď koukám že to tak je i v examples/CD-collection