Formulář v komponentě – nefunguje callback

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
22
Člen | 1478
+
0
-
use Nette\Application\UI\Control;
use Nette\Application\UI\Form;
use Nette\Diagnostics\Debugger;

class Upload extends Control
{
	protected function createComponentUpload($name)
	{
		$form = new Form($this, $name);
		$form->addUpload('upload');

	    	$form->addSubmit('submit', 'Upload')
	    		->onClick[] = callback($this, 'uploaded');

		return $form;
	}

	public function uploaded(SubmitButton $form)
	{
		$file = $form->form->values;
		Debugger::fireLog($file);
	}

	public function render()
	{
		$template = parent::createTemplate();
		$template->setFile(__DIR__ . '/ImageUpload.latte');

		$template->form = $this->getComponent('upload');

		$template->render();
	}
}

Presenter:

...
    protected function createComponentUpload($name)
    {
		return $form = new Upload($this, $name);
    }
...

Problém je v tom, že form se sice submitne, ale onClick[] = callback($this, 'uploaded') se neprovede. Poslední Nette 2 beta..
Dělám něco špatně?

Editoval 22 (5. 6. 2011 8:57)

Mikulas Dite
Člen | 756
+
0
-

A nechceš spíš použít onSuccess nad $form?

22
Člen | 1478
+
0
-

$form->onSuccess[] = callback($this, 'uploaded');
obávám se, že na věci nic nemění.. :-( Každopádně proč bych neměl použít onClick[]?

22
Člen | 1478
+
0
-

ty, už jsem tě pochopil :-) do řiti, taková kravina:

use Nette\Forms\Controls\SubmitButton;
Kurtas
Člen | 109
+
0
-

Ahoj, mám podobný problém v presenteru mám udělany form, ale neprovadi se $SubmitButton->onClick[] = callback($this, ‚TodoFormSaveClicked‘); … a form je validni.

Mám poslení verzi 2.0 Beta pro php 5.3

Část presenteru:

protected function createComponentTodoForm()
{
  $form = new Form;
  $form->addText('text', 'Úkol', 60, 100)
       ->addRule(Form::FILLED, 'Musíte vyplnit text!');
  $form->addSubmit('save', 'Uložit')
       ->onClick[] = callback($this, 'TodoFormSaveClicked');
  $form->addSubmit('back', 'Zpět')->setValidationScope(NULL);
  return $form;
}

public function TodoFormSaveClicked(Form $form)
{
  dump($_POST);
  $values = $form->getValues();
  $todo = new Todo;
  $todo->text = $values['text'];
  $todo->added = new DateTime;
  $this->model->createTodo($todo);

  $this->flashMessage('Úkol vložen.');
  $this->redirect('TodoList:show');
}
22
Člen | 1478
+
0
-

no a máš tam správně use??

use Nette\Application\UI\Form;
use Nette\Forms\Controls\SubmitButton;
..

edit: navín v tom callbacku by jsi měl mít ..(SubmitButton $form)

Editoval 22 (14. 6. 2011 13:59)

Kurtas
Člen | 109
+
0
-

nevim proc ale NetBeans mi classu Nette\Application\UI\Form nenabizi, tak jsem myslel ze v 2.0 neni, po tvem prispevku jsem se podival primo do lib\Nette\Application\UI\ jestli tam je ci neni a bylo jasno :)

Opravdu stacilo pridat

use Nette\Application\UI\Form;

… ten callback jsem prepsal

Diky