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
 
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)

- Kurtas
 - Člen | 109
 
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');
    }
				
- Kurtas
 - Člen | 109
 
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