renderovani controlu
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- pekinen
- Člen | 29
Prosim o pomoc s renderovanim komponent.
Mam v jedne sablone vice komponent:
@{control navigace:menu}
@{control detailObjektu:detail}
a pokud z sablony kompomenty „navigace“ volam AJAXove signal kompomenty „detailObjektu“, ktery ma za ukol zmenit vystupni data pro „detailObjektu“, tak se mi pekresli komponenty obe.
Stejne tak, kdyz volam signal kompomenty „navigace“.
Nevim, zda je problem v invalidaci komponent nebo jen dobre nechapu
zivotni cykly.
v BasePresenteru mam:
<?php
/*
** Zakladni abstraktni Presenter, ze ktereho vychazeji ostatni Presentery
*/
abstract class BasePresenter extends /*Nette\Application\*/Presenter
{
/** @var object
*
* - deklarace zakladniho Modulu
*/
protected $model;
protected function startup()
{
$this->model = new Model;
}
/**
* funkce na vytvoreni objektu sablony pro zobrazeni obsahu
*/
/**
* vestavena tovarnicka na tvorbu komponent
*/
protected function createComponent($name)
{
switch ($name) {
case 'navigace':
$menu = new Menu;
$this->addComponent($menu, $name);
break;
case 'detailObjektu':
$detail = new Detail;
$this->addComponent($detail, $name);
break;
default:
parent::createComponent($name);
break;
}
}
}
?>
Detail.php:
<?php
/*
** Komponenta na vykresleni detailu objektu
*/
class Detail extends Control
{
/** @var Model */
protected $model;
/** @persistent id objektu */
private $idDetailu = 0;
/** @persistent */
private $table = 1;
/** @var Menu */
//public $menu;
public function __construct()
{
parent::__construct();
$this->model = new Model;
}
public function handleChangeDetail($id, $table)
{
$this->getPresenter()->idObjektu = $id;
$this->table = $this->getPresenter()->table;
}
/**
* Renders menu.
*/
public function renderDetail()
{
$template = $this->createTemplate();
$template->detail = $this->model->getDetailDataSource($this->getPresenter()->idObjektu, $this->table);
$template->setFile(dirname(__FILE__) . '/detail.phtml');
$this->invalidateControl('detail');
$template->render();
}
}
?>
Menu.php:
<?php
/*
** Komponenta na vykresleni hlavniho menu
*/
class Menu extends Control
{
/** @var Model */
protected $model;
/** @persistent */
public $table = 1;
/** @var Menu */
//public $menu;
public function __construct()
{
parent::__construct();
$this->model = new Model;
}
public function handleChangeHierarchy($table)
{
$this->getPresenter()->table = $table;
}
/**
* Renders menu.
*/
public function renderMenu()
{
$template = $this->createTemplate();
$template->menu = $this->model->getHierarchyDataSource($this->getPresenter()->table);
$template->setFile(dirname(__FILE__) . '/menu.phtml');
$this->invalidateControl('menu');
$template->render();
}
}
?>