problem s plink makrom v komponente vyrobenou cez Multiplier
- bazo
- Člen | 620
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
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)