Jak na Multiplier komponent, konkrétní příklad použití

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

Ahoj,
prosím o radu resp. konkrétní ukázku užití Multiplieru.

Mám jednoduchou komponentu:

class Counter extends \Nette\Application\UI\Control{

      /** @persistent */
      public $number;

      public function handleAdd(){
            ++$this->number;
      }

      public function render(){
            $this->template->setFile(__DIR__.'\counter.latte');
            $this->template->number = $this->number;
            $this->template->render();
      }
}

k ní šablonu counter.latte

{$number} <a n:href="add!">+</a>

a továrničku

public function createComponentCounter(){
            return new Counter;
      }

Pokud zavolám v nějakém view

{control counter}
{control counter}
{control counter}

tak se komponenta vykreslí a samozřejmě, pokud kliknu na <a n:href="add!">+</a>, tak se $number zvýší u všech komponent (protože se jedná o jedinou, vykreslenou vícekrát).

Prosím o konkrétní úpravu továrničky a handle metody, aby fungovala každá samostatně. Díky moc.

jiri.pudil
Nette Blogger | 1032
+
+1
-

Tady.

thm
Člen | 147
+
0
-

Jojo, to jsem četl, ale nejsem z toho mouodrý…

Pokud upravím továrničku na

public function createComponentCounter(){
            return new Nette\Application\UI\Multiplier(function(){
                  return new \App\Test\Counter;
            });
      }

Nette mi vyhodí There is no handler for signal ‚add‘ in class Nette\Application\UI\Multiplier.

Nevím ale jak upravit handleMetodu, a navíc si myslím, že tu továrničku taky nemám správně (?)

Vojtěch Dobeš
Gold Partner | 1316
+
+2
-

Ještě je třeba upravit šablonu na:

{control counter-1}
{control counter-2}
{control counter-3}