Parametry handleru komponenty jsou NULL

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

Vtrhnul jsem do Nette trochu narychlo, musim do něj předělat eshop a mám na to jen pár dní. Takže se rovnou přiznám, že některé postupy v tom kódu určitě jdou jinak a lépe ale neměl jsem zrovna čas řešit jak…každopádně jakýkoliv komentář nebo radu týkající se způsobu programování v Nette ocením.

Můj hlavní problém který se mi nedaří vyřešit je několikrát ve fórech omýlaný null předávaný handleru komponenty. Zkoušel jsem volat parent::__construct, zkoušel jsem různé jiné zápisy které jsem tady ve fóru našel a nic nepomohlo, můj handler „handleHlas“ který má odchytit kliknutí na možnost v anketě nebere parametry a vypisuje jen dvakrát NULL…

Odkaz je generovaný správně (aspoň ty parametry)
http://localhost/awis/svn/?…
kde hlas je id možnosti v anketě a idAnketa je …id ankety.

Mám za to, že to bude jen nějaká totální blbost, že jsem úplně nepochopil nějakou podstatnou vlastnost Nette…ale uniká mi co by to mohlo být. Za jakoukoliv pomoc budu velmi vděčný.

anketa.php

<?php
class Anketa extends Control {

  public function __construct() {
    parent::__construct();
  }

  public function render()
  {
    $anketa_data = array();
    /** zkraceno--ziskavani dat pro anketu*/
    $template = new Template();
    $template->shop = Environment::getVariable('SHOP');
    $template->language = Environment::getVariable('LANGUAGE');
    $template->ank_data = $anketa_data;
    $template->registerFilter(new LatteFilter);
    $template->registerHelper('escape', 'TemplateHelpers::escapeHtml');
    $template->setFile(Environment::expand('%templatesDir%/components/anketa.phtml'));
    $template->control = $this;
    $template->render();
  }

  public function handleHlas($hlas, $idAnketa) {
    Debug::dump($hlas);
    Debug::dump($idAnketa);
    $this->invalidateControl();
  }
}

?>

BasePresenter.php

<?php

abstract class BasePresenter extends Presenter
{
	public $oldLayoutMode = FALSE;
  protected $dataSablony;

  public function __construct() {
    $this->dataSablony = new DataSablony();

    $this->template->shop = Environment::getVariable('SHOP');
    $this->template->language = Environment::getVariable('LANGUAGE');

    $this->template->seznamKategorii = $this->dataSablony->seznamKategorii();
    $this->template->pocetPolozek = $this->dataSablony->pocetPolozek();
    $this->template->stranky = $this->dataSablony->stranky();

    $this->template->s_language = Environment::getSession('language');

    $anketa = new Anketa();
    $this->addComponent($anketa, 'anketa');
    $this->template->anketa = $anketa;

  }
}
?>

anketa.phtml

{if ($shop['anketa'] > 0 && $ank_data != false)}
<br />
<div class="left_box">
  <div>{$language['anketa']}</div>
  <table class="anketa">
    <tr>
      <td colspan="2" style="text-align: center;">
        <strong>{$ank_data['otazka']}</strong>
      </td>
    </tr>
    {for $i=1; $i<=5;$i++}
    <tr>
      <td colspan="2">
        <a class="ajax ank" href="{link Hlas!, $i, $ank_data['id_anketa']}">{$ank_data['moznosti'][$i]}</a>
      </td>
    </tr>
      {if ($ank_data['zobrazovat_stav_na_web'])}
      <tr>
        <td style="width: 110px;">
          <img src="{link //this}/img/chart_row.gif" width="{$ank_data['sirka'][$i]}" height="10" alt="hlas" style="border: 1px solid black;"/>
  			</td>
        <td>{$ank_data['procenta'][$i]}%</td>
      </tr>
      {/if}
    {/for}
  </table>

</div>
{/if}
Motig
Člen | 2
+
0
-

dočasně pokračuju ve vývoji s tím, že handlery které by jinak byly v souborech komponent rvu do BasePresenteru a místo {link} dávám {plink} … takhle to pak funguje

bazo
Člen | 620
+
0
-

zrus ten prazdny konstruktor, je tam zbytocny a nepripaja sa komponenta k rodicovi(presenteru)
a v link makre musis mat argumenty pomenovane rovnako ako v handle
cize nie

{link Hlas!, $i, $ank_data['id_anketa']}

ale

{link Hlas! hlas=> $i, idAnkety => $ank_data['id_anketa']}