redrawControl na formulář nefunguje?

sevca79
Člen | 55
+
0
-

Ahoj,
zdá se mi to nesmysl, ale mám něco plus mínus následujícího

formulář

class MyForm extends \Nette\Application\UI\Form {
    public function __construct() {
        parent::__construct();
    }
    public function create() {
	.......
	return $this
	}
}

který v presenteru injectuju a creatnu,
ale když ho chci redrawnout v nějakým handleru, tak mi to to háží chybovou hlášku
Call to undefined method App\Forms\MyForm::redrawControl().

/** @var \App\Forms\MyForm @inject */
public $myForm;

	.......

public function createComponentMyForm() {
    $form= $this->myForm->create();

    return $form;
	}

public function handleNeco() {
    if ($this->isAjax()) {
        $this['myGrid']->redrawControl();
        $this['myForm']->redrawControl();
    }
}

v šabloně samozřejmě controly mám

{control myForm}
{control myGrid}

u myGridu je vše v pořádku…jak mám v tom handleru ten myForm aktualizovat…házet před to snippet se mi nechce, protože to je v různých includovaných šablonách a musel bych tam dávat snippetArea, který by mě redrawnul i ostatní komponenty

co tam dělám špatně? resp. co mi tam prosím chybí??
děkuji za nějakou radu

Editoval sevca79 (24. 10. 2017 14:39)

David Matějka
Moderator | 6445
+
0
-

ahoj,

  1. budes muset pouzit snippet, bez nej snippety nejdou
  2. tvuj zpusob, jak vytvaris a pracujes s formularem je ponekud nestastny
    • rozhodne bys nemel registrovat formular jako sluzbu
    • metoda create je zbytecna, kdyz vracis this
    • a ani neni doporucene od formulare dedit
    • bude lepsi, kdyz si napises factory na formular nebo udelas formular jako komponentu. jak na to, najdes treba https://doc.nette.org/…s/form-reuse a na spoustu dalsich mistech, kdyz budes hledat :) kdyz to udelas jako komponentu, tak pote ti bude stacit mit ten snippet v te komponente
vladimir.biro
Člen | 163
+
0
-

David Matějka napsal(a):

ahoj,

  1. budes muset pouzit snippet, bez nej snippety nejdou
  2. tvuj zpusob, jak vytvaris a pracujes s formularem je ponekud nestastny
    • rozhodne bys nemel registrovat formular jako sluzbu
    • metoda create je zbytecna, kdyz vracis this
    • a ani neni doporucene od formulare dedit
    • bude lepsi, kdyz si napises factory na formular nebo udelas formular jako komponentu. jak na to, najdes treba https://doc.nette.org/…s/form-reuse a na spoustu dalsich mistech, kdyz budes hledat :) kdyz to udelas jako komponentu, tak pote ti bude stacit mit ten snippet v te komponente

Mohol by som sa opytat, preco nie je dobre registrovat formular ako sluzbu a preco nie je odporucene dedit od formulara? Dakujem.

David Matějka
Moderator | 6445
+
+2
-

Mohol by som sa opytat, preco nie je dobre registrovat formular ako sluzbu

neni dobre registrovat zadnou komponentu jako sluzbu, mimojine proto, ze bys ji pak nemohl pouzit na strance vicekrat, jelikoz muze byt pripojena pouze k jednomu rodici. a principialne neni komponenta sluzba. jako sluzbu bys mel registrovat pouze tovarnu na komponentu

a preco nie je odporucene dedit od formulara? Dakujem.

to je jeste obecnejsi problem z oop, viz napriklad composition over inheritance na wiki. ve zkratce: s dedicnosti prichazis o flexibilutu, jelikoz mas kodem urcenou hierarchii trid