widget v blocku ⇒ problém s AJAXem
- buff
- Člen | 63
Zdravím. Narazil jsem na problém s ajaxovým požadavkem zavolaným komponenty vnořené do blocku. Pro účely vysvětlení uvádím triviální příklad – inkrementátor, stránku obsahující pouze číslo (0) a odkaz pro jeho inkrementování. Následují zdrojové kódy:
presenter:
<?php
class DefaultPresenter extends Presenter
{
public $oldLayoutMode = FALSE;
public function createComponentInc($name) { return new Inc; }
protected function beforeRender() {
if (!Environment::getSession()->isStarted()) {
Environment::getSession()->start();
}
}
}
?>
komponenta:
<?php
class Inc extends Control {
/** @persistent */
public $n = 0;
public function render() {
$template = $this->template;
$template->n = $this->n;
$template->setFile(dirname(__FILE__) . '/Inc.phtml');
$template->render();
}
public function handleInc() {
$this->n++;
$this->invalidateControl('n');
}
}
?>
její šablona:
{snippet n}
<a href="{link inc}" class="ajax">inc</a>: {$n}
{/snippet}
K šabloně celého presenteru mám dvě varianty, pro stručnost uvádím pouze obsah tagu body, v hlavičce mám includované jquery.js, jquery.nette.js a navázání ajaxováho volání na odkazy třídy ajax.
První varianta:
@{control inc}
Druhá varianta:
@{block #a}
@{control inc}
{/block}
Zatímco v první variantě vše funguje jak má, v druhé variantě mi ajaxové volání vrací (mou „oblíbenou“) chybu.
InvalidStateException
Cannot send header after HTTP headers have been sent (output started at /home/miroslav/www/nic/app/temp/c-Nette.Template/_72a2be4003a9de39463a481571904ab5.Default.default.phtml.php:61).
Na řádce 61 není naprosto nic zajímavého, je tam <?php
,
které následuje po </html>
.
Zkusil jsem i variantu bez komponenty, s celým kódem pouze v presenteru a ta funguje s blockem i bez blocku. Toto je tedy minimální příklad, ve kterém nastává můj problém.
Nevíte prosím někdo, co dělám špatně?
Díky!
EDIT: ještě doplním, že revize Nette je 492 ze svn (teď se dívám, že tedy asi poslední, co vůbec v svn vyšla a vyjde??).
Editoval buff (22. 9. 2009 10:05)