Ako pripojit komponentu k presenteru pri volani komponenty?
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- duskohu
- Člen | 778
Caute viete mi poradit? Mam BaseFilterFormControl je to len taka obalka ktora ma tlacitka a nejake metody, a prvky formulara naplnam v preseneru. Mam problem ked pri naplnani formulara v tovarnicke potrebujem zavolat metodu dependentSelectBoxDataGenerator ktora je v komponente a ktora mi generuje data-atribut s likou na handle, lenze v nej volam $this->link(), samozrejme to nejde lebo komponenta este nebola pripojena k presenteru, Neviete mi poradit ako by som to vedel riesit?
class BaseFilterFormControl extends UI\Control {
// generuje url a parameter pre data-atribut
public function dependentSelectBoxDataGenerator($handle) {
$rc = $this->getReflection();
if ($rc->hasMethod("handle$handle")) {
$param = $rc->getMethod("handle$handle")->getAnnotation('param');
$pos = strrpos($param, '$');
$param = substr($param, ($pos + 1));
}
$url = $this->link("$handle!"); // tuto nastane problem kedze pri volani este nie je komponenta pripojena
$param = "$this->name-$param=";
$data = '{"url":"' . $url . '", "param":"' . $param . '"}';
return $data = $data;
}
protected function createComponentForm() {
$form = new Form;
$form->addSubmit('filter', 'Filter');
$form->addSubmit('reset', 'Reset')
->onClick[] = callback($this, 'cancelClick');
$form->onSuccess[] = callback($this, 'filterSubmitted');
return $form;
}
}
presenter:
protected function createComponentFilter() {
$control = new \FilterFormControl;
$form = $control['form'];
$sidkraj = $this->sidkrajRepository->findAll()->order("code ASC");
$form->addSelect('sidkraj_code', 'Kraj', $sidkraj->fetchPairs('code', 'name'))
->setAttribute('data-dependent-select-box', $control->dependentSelectBoxDataGenerator('ChangeSidokrCode'))
->setPrompt('- Zvoliť -');
return $control;
}
public function handleChangeSidokrCode($sidkrajCode = NULL) {
......
}
- LeonardoCA
- Člen | 296
Neměl jsem čas číst zdrojové kódy, ale myslím si že bude stačit, když použiješ $this->lazyLink();
Editoval LeonardoCA (16. 1. 2013 11:33)
- duskohu
- Člen | 778
Dakujem za odpoved, nestacilo, ale toto pomohlo:
https://forum.nette.org/…mocou-create#…