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

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
+
0
-

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
+
0
-

Dakujem za odpoved, nestacilo, ale toto pomohlo:
https://forum.nette.org/…mocou-create#…