Formular z komponenty nacitat do snippetu v komponente
- thm
- Člen | 149
Takhle by to mohlo jít (jestli dobře chápu co potřebuješ – nerozumím
co je formulář ajaxem vytvořený).
Toto řešení zobrazí odkaz „ukaž formulář“, po kliknutí se provede
handle (kam si asi chceš ještě něco dát, jinak bych to řešil
javascriptem) a formulář se zobrazí.
presenter/komponenta:
/** @persistent */
public $formShowed = false;
public function handleShowForm(){
$this->$formShowed = true;
if($this->isAjax()) $this->redrawControl('someSnippet');
else $this->redirect('this');
}
public function createComponentSomeForm(){
//...
return $form;
}
public function renderDefault(){
$this->template->formShowed = $this->formShowed;
}
A v šabloně normálně:
<a n:href="showForm!" n:if="!$formShowed" class="ajax">Ukaž formulář</a>
{snippet someSnippet}
<div n:if="$formShowed">
{control someForm}
</div>
{/snippet}
Editoval thm (29. 9. 2014 9:31)
- sucho
- Člen | 57
(jestli dobře chápu co potřebuješ – nerozumím co je formulář ajaxem vytvořený)
Načítať AJAXOM formulár, ktorý je vytvorený v komponente do snippetu ktorý je taktiež v tej istej komponente
skúsil som to
a stále to vyžaduje nejaký render na to aby to mohlo zobraziť
exception 'Nette\MemberAccessException' with message 'Call to undefined method App\...Control::render().'
mám to nejak takto
/** @persistent */
public $formShowed = false;
public function createComponentForm(){
$form = new Form;
$form->addText('title', 'Názov')
->setRequired('Vyplňte toto pole');
...
return $form;
}
public function renderDefault(){
$this->template->formShowed = $this->formShowed;
$this->template->render();
}
public function handleEdit($id){
$this->formShowed = true;
if($this->presenter->isAjax()){
$this->redrawControl('orderStatus');
}else{
$this->redirect('this');
}
}
a latte v komponente
{snippet orderStatus}
{if $formShowed}
{control form}
{/if}
{/snippet}
<div class="order-status">
{foreach $statuses as $status}
<div class="status">
<a href="{link Edit!, $status->id}" class="edit ajax">{_'upraviť'}</a>
</div>
{/foreach}
</div>
- thm
- Člen | 149
exception 'Nette\MemberAccessException' with message 'Call to undefined method App\...Control::render().'
Komponenta má metodu ->render(), ne ->renderDefault(). Psal jsem to
pro presenter.
Hláška ti to říká: „Volání nedefinované metody render()“
Jinak co jsem to tak zběžně projel, by to asi mohlo fungovat.
Editoval thm (29. 9. 2014 11:28)