neprovede se invalidace snippetu

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
HosekPetr
Člen | 31
+
0
-

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
+
0
-

Máš přilinkovaný nějaký js, který by invalidaci obsloužil?? Najdi si některý tu