Formulář v komponentě komponenty, nefunguje lokalní snippet
- Wee93
- Člen | 2
Ahoj,
řeším problém formuláře v komponentě který refrešne vše místo
potřebného snippetu
v kostce:
Presenter → komponenta1 → komponenta2 | formulář
Presenter načte včechny data filtrované s proměnným @persistent a ty dále distribuuje
Presenter pomocí multiplieru generuje komponentu1 a vkládá do ní data,
která se v presenteru načítají v startup() / actionDefault()
stejně tak komponenta1 generuje pomocí multiplieru komponenty2 a obdobně
získává data v konstruktoru (služby i data si komponenty předávají
v konstruktoru)
Presenter
protected function createComponentGet() {
return new Multiplier(function($id) {
$this->data[$id]->requests = $this->subsidy->requests->find($this->data[$id]->id, null, null, null, $this->year, $this->select, $this->type)->fetchAssoc('id');
$control = new \iW\CMS\Admin\Subsidy\Applicants\Applicant($this->system, $this->extensions, $this->subsidy, $this->data[$id], $this->year, $this->select, $this->type);
return $control;
});
}
Komponenta1
protected function createComponentRequest() {
return new UI\Multiplier(function($id) {
$request = $this->applicant->requests[$id];
$control = new Request($this->system, $this->extensions, $this->subsidy, $this->applicant, $request, $this->year);
return $control;
});
}
Komponenta2
class Request extends UI\Control {
use \Nette\SmartObject;
private $animals;
private $returned_step;
public function __construct(
public \iW\Model\System $system,
public \iW\Model\Extensions $extensions,
public \iW\Model\App\Subsidy $subsidy,
private $applicant,
private $request,
private $year
) {}
protected function createComponentQuantity() : Form {
$form = new Form();
$form->getElementPrototype()->class('ajax');
$form->addText("count", "Počet")->setValue($this->request->count);
$form->addSubmit("save", "Uložit");
$form->onSubmit[] = [ $this, 'onQuantity'];
return $form;
}
public function onQuantity(Form $form) {
$values = $form->getValues();
if ($values['count']) {
$this->request->count = $values['count'];
$this->subsidy->requests->set($this->request->id, [
"count" => intval($values['count'])
]);
}
$this->redrawControl('check');
}
když v Komponentě2 zavolám obyčejný handle, snippet, který obsahuje se
v pořádku překreslí
avšak, když zavolám ajaxový submit v komponetě2 ajaxem se překreslí
celý presenter se zachovanými @persistent
Vůbec nevím co s tím, už jedu pokus omyl prosím o jakoukoliv radu, jak validovat čistě ten snippet který se má překreslit.. chapal bych kdyby se to dělo i čistě u hadle a nemohl komponentu třeba najít, ale u něj to funguje bez problémů.
Děkuji moc za jakoukoliv pomoc