redrawControl mezi dvěma šablonama
- kalipny
- Člen | 19
Ahoj,
Mám komponentu, k ní mám vytvořenou šablonu X a Y.
Signálem komponenty změním šablonu X na šablonu Y, která v sobě obsahuje
fomulář. – to Funguje
Problém je, že Když dám redrawControl při zpracování formuláře, který je v šabloně Y, tak se mi komponenta překreslí, ale nastaví se mi tam původní šablona bez formuláře. Nevíte jak na to?
Ještě poznámka: vše provádím ajaxem.
Díky za odpověď.
Konstrukce komponenty je standardní:
<?php
class PolozkaCmp extends UI\Control
{
private x;
function __construct()
{
parent::__construct();
$this->x = 100;
}
public function handlesignalX(){
$this->x = 200;
$this->getpresenter()->redrawControl('panel');
}
public function handlesignalY(){
$this->x = 100;
$this->getpresenter()->redrawControl('panel');
}
public function render( )
{
if ($this->x == 100) {
$this->template->setFile(__DIR__ . '/'.strtolower('sablonax.latte')');
} elseif ($this->x == 200) {
$this->template->setFile(__DIR__ . '/'.strtolower('sablonay.latte'));
}
$this->template->render();
}
//======================================================================================================
protected function createComponentPForm($name)
{
$form = new \PForm();
return $form;
}
}
?>
- Polki
- Člen | 553
Jde o to, že při zpracování formuláře se nastartuje celý životní cyklus, čímž dojde ke znovu inicializování tvé komponenty a v ten moment má tato komponenta nastavenou šablonu X. Zkuz ve zpracování formuláře (onValidate) nastavit $this->x = 200;
nebo v onValidate zavolej metodu $this->handlesignalY();
- Polki
- Člen | 553
MajklNajt napsal(a):
stačilo by nastaviť
$x
ako persistentnú/** @persistent */ public $x = 100;
musí byť
public
a nesmieš ju nastavovať v constructore ale dať jej východziu hodnotu priamo
Jistě, ale pokud to jde, tak bych perzistentní parametry nepoužíval, jelikož porušují zapouzdření a taky u nich nevynutíš datový typ.
- Polki
- Člen | 553
CZechBoY napsal(a):
@Polki Můžeš si udělat svoji loadState/saveState funkci která to bude řešit.
Udělal jsem si na podobné věci třídu, která to řeší ukládáním do session.
CZechBoY napsal(a):
Nebo počkat na php 7.4, která bude mít typed properties.
To bych se načekal, když spousta poskytovatelů ještě dnes nepodporuje vyšší verzi PHP, než 7.0 i když ta už ztratila podporu v prosinci. Každopádně o typed properties jsem ještě neslyšel kouknu na to díky.