neprovede se invalidace snippetu
- HosekPetr
- Člen | 31
Dobrý den všem,
mám problém s invalidací snippetu.
Mám udělanou komponentu pro zobrazování widgetu s formulářem pro přidání nějaké entity.
V presenteru pak mám vykreslený widget s formulářem a ten odesílám ajaxem formulář se odešle a provede se i script pro uložení entity, ale nepošlou se zpět žádná data a nerefreshne se snippet, který je v presenteru!
adresářová struktura mé app je následující
SecuredModule
components
forms // formuláře
newEntityForm.php
widgets // widgety
newEntityWidget.php
newEntityWidget.latte
presenters
overview.php
templates
overview
default.latte
overview.php
namespace SecuredModule;
use Nette\Diagnostics\Debugger;
use SecuredModule\Components\Widgets\lastChangesWidget,
class OverviewPresenter extends SecuredPresenter
{
public function createComponentLastChangeWidget()
{
return new lastChangesWidget();
}
}
default.latte
{block content}
{snippet lastChanges}
{control lastChangesWidget}
{/snippet}
{control newEntityWidget}
{/block}
newEntityWidget.latte, newEntityWidget.php
<div id="newEntityWidget" title="Nová entita">
{form newEntity}
<div class="formInput">
{label name /}
{input name}
</div>
<div class="formInput">
{label description /}
{input description}
</div>
{/form}
</div>
class NewEntityWidget extends Control
{
public function __construct()
{
parent::__construct();
}
public function createComponentNewEntity()
{
$form = new NewEntityForm();
$form->onSuccess[] = callback($this->presenter, 'handleNewEntity');
return $form;
}
public function Render()
{
$this->template->setFile(__DIR__.'/NewEntityWidget.latte');
$this->template->render();
}
}
newEntityForm.php
<?php
namespace SecuredModule\Components\Forms;
class NewEntityForm extends BaseForm
{
public function __construct()
{
parent::__construct();
$this->addText('name', 'Název')
->setRequired('Vyplňte prosím název!')
$this->addText('description', 'Popis')
->setRequired('Vyplňte prosím popis!')
->addRule(self::MAX_LENGTH, 'Popis má více než 50 znaků!', 50);
}
public function handleNewEntity($form)
{
$entities = $this->presenter->entities;
$formValues = $form->getValues();
$insertValues = array(
'name' => $formValues['name'],
'description' => $formValues['description'],
);
$entities->createItem($insertValues);
$this->presenter->invalidateControl('lastChanges');
}
}
EDIT:
Tak už to funguje odesílá to data zpět! Měl jsem různé drobné chybyčky na různých místech, které se vubec nevtahovaly k vypsaným částem kódu.
Ale nerefreshne se snippet! :-(
Editoval HosekPetr (14. 7. 2012 18:58)
- Michal Vyšinský
- Člen | 608
Máš přilinkovaný nějaký js, který by invalidaci obsloužil?? Najdi si některý tu