Dvě komponenty na jedné stránce, jak zachovávat stav všech mezi signály?

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

Ještě jsem narazil na problém, že nevím, jak bych měl zachovávat stav více komponent, které jsou na jedné stránce.

Mám teď na jedné stránce 2 komponenty. Pokud kliknu na tlačítko v jedné komponentě, tak se ale ztratí aktuální stav té první komponenty, protože prostě ten ty linky vedoucí na signály komponent neobsahují data pro jiné komponenty, ale jen pro své.

Možná to je něco s těmi persistentními parametry, ale nevím, přišlo by mi to takové neohrabané a ani nevím, kde přesně bych měl kontrolovat ty persistentní parametry, jestli v nich jsou nějaká data. V konstruktoru komponenty tam asi ještě nebudou, když se objekt teprve vytváří…

Krab
Člen | 10
+
0
-

matej21 napsal(a):

https://doc.nette.org/…n/presenters#…

To je divný…, např. mám setter, který si mi mimo vlastní nastavení nějaké proměnné ještě udělá dodatečnou logiku např. výpočtu nějakých dalších členských proměnných. No a teď mi najednou někdo nastaví ten parametr jinak než tím setterem (nette ty per. parametry). Jak pak poznám, jestli mám provést tu funkcionalitu toho settru dodatečně nebo ne? Nebo si ten parametr nějak nastavím třeba v továrničcce a nette mi ho pak přepíše.

David Matějka
Moderator | 6445
+
0
-

nevim, jestli te dobre chapu.. mas na mysli neco takovyho?

class SomeControl extends UI\Control
{
	/** @persistent */
	public $foo;

	protected $bar;

	public function setFoo($foo)
	{
		$this->foo = $foo;
		$this->bar = do_something($foo);
	}
}

jo?

a pri obnove persistentnich parametru se neobnovi hodnota bar, jo?

napadaji me dva zpusoby, jak to vyresit:

  1. prepsat v controlu metodu loadState – ta se stara o obnovu parametru komponenty. nejlepsi bude, kdyz zavolas load stateState predka a provedes potom nejaky vypocty
  2. na clenskou promennou $bar nesahat z kodu primo, ale pres getter, ktery provede kontrolu, zda doslo k tomu vypoctu
Krab
Člen | 10
+
0
-

matej21 napsal(a):

nevim, jestli te dobre chapu.. mas na mysli neco takovyho?

class SomeControl extends UI\Control
{
	/** @persistent */
	public $foo;

	protected $bar;

	public function setFoo($foo)
	{
		$this->foo = $foo;
		$this->bar = do_something($foo);
	}
}

jo?

a pri obnove persistentnich parametru se neobnovi hodnota bar, jo?

napadaji me dva zpusoby, jak to vyresit:

  1. prepsat v controlu metodu loadState – ta se stara o obnovu parametru komponenty. nejlepsi bude, kdyz zavolas load stateState predka a provedes potom nejaky vypocty
  2. na clenskou promennou $bar nesahat z kodu primo, ale pres getter, ktery provede kontrolu, zda doslo k tomu vypoctu

Jo něco podobného. Mělo by se tam do toho frameworku pridat neco, aby se kontrolovalo, jestli existuje nejaky setter nebo neco. Treba jako /** @persistent(setWeeks) */