Nefunkční ajax v komponentě

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

Zdravím. Snažím se už docela dlouho přijít na to kde mám chybu v následujícím :

Snažím se napsat komponentu, která se bude AJAXově překreslovat. Při zpracování požadavku je mi ovšem vrácena celá stránka. Ajax jsem zatím testoval v podobném rozsahu přímo v aplikaci a tam vše fungovalo, po přesunutí do komponenty je někde něco špatně.

Používám PHP 5.3.3 a Nette 2.0beta

komponenta :

class SrvDirList extends NControl
{

    private $currentpath = false;

    public function __construct($path = false)
    {
        $this->currentpath = $path;
        parent::__construct();
    }


    public function handleChangeDir($cesta)
    {
        $this->currentpath = $cesta;
    }

    public function render()
    {
        $this->template->setFile(dirname(__FILE__) . '/SrvDirList-default.latte');
        $this->template->path = $this->currentpath;
        $this->template->path1 = 'Cesta1';
        $this->template->path2 = 'Cesta2';
        $this->template->render();
    }

Šablona :

{snippet}
<div class="SDL_FullIcon" name="{link changedir $path1}">
Cesta1
</div>
<div class="SDL_FullIcon" name="{link changedir $path2}">
Cesta2
</div>
{$path}

<script>
$('.SDL_FullIcon').dblclick(function(){
    $.get($(this).attr('name'));
});
</script>
{/snippet}

V presenteru je vyvoláváno standardně pomocí {control dirList}.

VaKvas
Začátečník | 111
+
0
-

Pokud generujes link na signal tak by to melo byt takto (s vykřičníkem).
Tím se odlisi od odkazu na beznou akci.

<div class="SDL_FullIcon" name="{link changedir! $path1}">

Editoval VaKvas (8. 9. 2011 8:52)

22
Člen | 1478
+
0
-

@vakvas: řek bych, že v komponentě vykřičník netřeba..

@hauron: ještě ti tam chybí invalidace snippetu v handleru .-)

Editoval 22 (8. 9. 2011 9:05)

Hauron
Člen | 26
+
0
-

O té invalidaci vím. Podle toho co jsem četl, by se komponenta měla invalidovat automaticky. každopádně pokud se pokusím o

if ($this->isAjax())

Dojde k chybě (požadavek se vrátí prázdný s kódem 500)

Editoval Hauron (8. 9. 2011 9:10)

22
Člen | 1478
+
0
-
$this->presenter->isAjax();

…kde jsi to četl?

Editoval 22 (8. 9. 2011 9:17)

Hauron
Člen | 26
+
0
-

https://doc.nette.org/…ication/ajax

„Komponenta, která přijímá signál, je automaticky označena za invalidní.“

Hauron
Člen | 26
+
0
-

Jinak děkuji, tímto se to vyřešilo.

22
Člen | 1478
+
0
-

podle toho to tak vypadá, ale několik poznámek:

  • míchat české a anglické názvy proměnných je ble
  • pomlčka v názvu šablony by zasloužila vyměnit za podtržítko
  • zapni si laděnku a vypni zachytavání vyjímek
  • pro debugovaní ajaxu je nejlepší Fireloger v kombinaci Debugger::firelog()
  • zjisti si, jestli je snippet po requestu opravdu invalidní