Funkce onClick u SubmitButton
- kuchuali
- Člen | 15
Dobry den.
Chtel bych pridat funkci, ktera by pobehla pri stisknuti tlacitka, ale podle me
asi nefunguje.
$container->addSubmit('submit', 'Save')->onClick = function () use ($container, $item, $tdate) {
$dd = $container->getValues();
$this->model->database->exec('UPDATE request_item SET it_delivery_date=? WHERE id=', $dd['it_date'], $item['id']);
};
Mozna mam chybu nekde v inicializaci te funkci?
Editoval kuchuali (15. 7. 2013 17:01)
- kuchuali
- Člen | 15
JHadamcik napsal(a):
Nikdy jsem s tím nepracoval, ale nedá se na to použít onSubmit callback?
$container->onSubmit[] = $this->onSubmit;
Teoreticky by se mohl volat po každém kliknutí na tlačítko a callback onSuccess až po úspěšném všem.
No, ja jsem to ted' zkusil. Udelal jsem to takhle:
public function submitDeliveryDate($container, $item){
$dd = $container->getValues();
$this->model->database->exec('UPDATE request_item SET it_delivery_date=? WHERE id=', $dd['it_date'], $item['id']);
}
A pak ten puvodni kod jsem zmenil tak:
$container->addSubmit('submit', 'Save');
$container->onSubmit[] = $this->submitDeliveryDate($container, $item);
ted mi to ale pise chybu a nechce stranku otevirat
- JHadamcik
- Člen | 47
kuchuali napsal(a):
No, ja jsem to ted' zkusil. Udelal jsem to takhle:public function submitDeliveryDate($container, $item){ $dd = $container->getValues(); $this->model->database->exec('UPDATE request_item SET it_delivery_date=? WHERE id=', $dd['it_date'], $item['id']); }
A pak ten puvodni kod jsem zmenil tak:
$container->addSubmit('submit', 'Save'); $container->onSubmit[] = $this->submitDeliveryDate($container, $item);
ted mi to ale pise chybu a nechce stranku otevirat
Callbacku nemůžeš takto předat parametry. Jako parametr bere $container. Zkus ten onClick[] = function(…){…};
- JHadamcik
- Člen | 47
Co takhle kouknout do Tracy?
//Sázím na absenci $that v use
$that = $this;
function() use ($container, $item, $that) {
}
$tdate jsem tam schválně nepsal, protože nevidím, kde ho tam využíváš.
//edit2: pochopitelně pak nevoláš $this→ ale $that->
Editoval JHadamcik (15. 7. 2013 17:48)
- David Matějka
- Moderator | 6445
container nema zadnej onSubmit callback, pouzij ten callback onClick na
buttonu.
ten prvni kod by skoro mohl fungovat, jen chybeji zavorky (nejsou nutny, ale
muze to zpusobit problem) a $this muzes pouzivat v anonymni fci od php 5.4. a
taky bych nedoporucoval predavat container pres use :)
Editoval matej21 (15. 7. 2013 17:49)
- JHadamcik
- Člen | 47
matej21 napsal(a):
container nema zadnej onSubmit callback, pouzij ten callback onClick na buttonu.
ten prvni kod by skoro mohl fungovat, jen chybeji zavorky (nejsou nutny, ale muze to zpusobit problem) a $this muzes pouzivat v anonymni fci od php 5.4. a taky bych nedoporucoval predavat container pres use :)
Děkuji za poučení :)
- kuchuali
- Člen | 15
matej21 napsal(a):
container nema zadnej onSubmit callback, pouzij ten callback onClick na buttonu.
ten prvni kod by skoro mohl fungovat, jen chybeji zavorky (nejsou nutny, ale muze to zpusobit problem) a $this muzes pouzivat v anonymni fci od php 5.4. a taky bych nedoporucoval predavat container pres use :)
Ja ale pres $this ten container nedostanu, protoze delam to cyklem foreach, a ten container se nikde neuklada. Mozna bych mel vytvorit nejakou $buffer uvnitr cele tridy, aby ten container se v ni ukladal? :(
- David Matějka
- Moderator | 6445
onClick udalost posila jako parametr button, na ktery se kliknulo.. muzes tedy
$button->onClick[] = function($button)
{
$container = $button->getParent();
}
- kuchuali
- Člen | 15
matej21 napsal(a):
onClick udalost posila jako parametr button, na ktery se kliknulo.. muzes tedy
$button->onClick[] = function($button) { $container = $button->getParent(); }
No, nevim… Stale mi po stisknuti vypisuje chybu, a ani nevim, co s tim
delat. Drive to aspon chybu nevypisovalo, ale stale v databazi nedelalo nic.
Takze zdava se mi, ze problem je prave s ni…
Ja jeste zkusim pomoci nejakych prikazu tam zjistit, je-li opravdu problem
v spojeni s databazi, pak tady napisu.
- kuchuali
- Člen | 15
2k napsal(a):
Nejprve bych si pročetl toto: https://doc.nette.org/cs/forms#…
Dik. Jen prosim takova otazka: da li funkci callback predat jako parametr container?
- jiri.pudil
- Nette Blogger | 1032
Takze metodou chyb a pokusu jsem zjistil, ze pridat onClick anonymni funkci se v Nette bohuzel asi neda.
Z čeho tak usuzuješ?
- kuchuali
- Člen | 15
jiri.pudil napsal(a):
Takze metodou chyb a pokusu jsem zjistil, ze pridat onClick anonymni funkci se v Nette bohuzel asi neda.
Z čeho tak usuzuješ?
Z toho, ze mi to vzdy vratilo chybu. Ja jsem ten kod delal krok za krokem jeste jednodussi, dokud jsem nevyzkousel proste zustavit v te funkci na onClick jenom redirect na jinou stranku, ale i to mi nefungovalo.
- David Matějka
- Moderator | 6445
asi 4× si tu napsal, ze ti to vypsalo chybu, ale ani jednou jsi nenapsal jakou chybu.
onClick event samozrejme na buttonu funguje, vetsinou je ale vhodnejsi resit ukladani v onSuccess na formu
- JoeKE
- Člen | 7
Cavte
Riesim podobny problem, pouzivam:
Nette 2.0.8
use Nette\Application\UI\Form;
use Nette\Forms\Controls\SubmitButton;
class MojForm extends Form
{
...
$this->addSubmit("add", "odoslat")->onClick[] = callback($this, 'add');
public function add(SubmitButton $button)
{
$values = $button->getForm()->getValues();
...
$this->presenter->invalidateControl("dataGrid");
}
problem je, ze sa formular odosle ale funkcia add uz sa nezavola. Formular je validny, onSuccess nepouzivam lebo tam chcem pouzit niekolko Buttonov
dakujem
Editoval JoeKE (2. 11. 2013 20:10)
- netije
- Člen | 1
Ako som pochopil zo starsieho (4 roky?) prispevku https://forum.nette.org/…te-formularu je nutne zavolat na forme fireEvents() rucne. A potom sa vyvolaju callbacks.
Mylim sa?
<?php
public function renderEdit($id = 0)
{
$form = $this['form'];
if ($form->isSubmitted()) {
$form->fireEvents();
return $this;
}
....
}
?>