problem s plink makrom v komponente vyrobenou cez Multiplier

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

Ahojte,

chcel som zacat pozuivat novinku ui Multiplier, vsetko funguje super az na jednu drobnost – v sablone komponenty takto vyribenej nie je mozne pouzit makro plink.

ak komponente predam $presenter, krici to na mna, ze component name nemoze byt null.

ak komponente predam aj dynamicky vytvoreny name v tvare $name.‚_‘.$id, zas na mna krici ze komponenta s menom $$id neexistuje;

da sa s tymto nieco urobit?

kod tovarnicky

<?php
protected function createComponentBox($name)
    {
	$presenter = $this;
	$model = $this->model;
	$translator = $this->translator;
	return new \Nette\Application\UI\Multiplier(function($id) use ($model, $translator, $presenter, $name) {
		$achievement = $model->getRepository('Achievement')->find($id);
		$box = new \Box($achievement, $presenter, $name.'_'.$id);
		$box->setTranslator($translator);
		return $box;
	});
    }
?>
Nox
Člen | 378
+
0
-

Používám komponenty se standardnějším konstruktorem typu (Control, name, *)

V dokumentačním příspěvku toto není uvedené, ale do closure multiplieru je posílaná ještě jedna hodnota a tu použiješ jako control (a první jako name)

<?php
Multiplier(function($name, $control){
    return new MyControl($control, $name, /* args */);
});
?>

Toto mi funguje, jestli je to správně, tak by to imho mělo být dáno do příspěvku… nebo líp do dokumentace, až se to tam octne

Edit: používám komponenty jako samostatné třídy, handlery se nevolají na Presenteru, ale jejich vlastní… jestli to tak nemáš, možná to teda bude jinak

Editoval Nox (31. 10. 2011 17:48)

bazo
Člen | 620
+
0
-

diky, to funguje, bolo by to treba niekde do dokumentacie napisat