dependent selectBox neprovede callback

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

Zdravím mám problém a vím že se tady řešilo mnohokrát ohledně této komponenty ale nic mi nepomohlo.
Mám form:

	$form->addSelect('sectors','Sectors', $this->model->getSectors())
				->setPrompt('Select...');
	$form->addDependentSelectBox("subsector", "Subsector", $form["sectors"], array($this, 		         "getValuesSubsectors"));
if ($this->presenter->isAjax())
			$form["subsector"]->addOnSubmitCallback(array($this, "invalidateControl"), "snippetSector");

k tomu metodu pro callback

public function getValuesSubsectors($form) {
		return $this->model->getSubSectors($form['sectors']->getValue());
	}

a v šabloně

<snippet snippetSector>
	{control addForm}
</snippet>

a pokaždé když vyberu z prvního selectu mi to vůbec nevstoupí do getValuesSubsectors
Neporadíte pls.
Díky

Editoval spiider (31. 1. 2012 16:50)

petr.jirous
Člen | 128
+
0
-

mám úplně stejný problém…

spiider
Člen | 162
+
0
-

Tak sem zjistil že to funguje pokud se na formulář použije namespace Nette\Application\AppForm
a pak teda:

$form = new AppForm($this, $name);

Ale pokud používám namespace Nette\Application\UI\Form a

$form = new Form();

tak to nejede poradíte pls?

Aurielle
Člen | 1281
+
0
-

Pravděpodobně máš bordel ve verzích Nette. Nette\Application\AppForm je už dlouho pohřbená věc, třída byla přejmenována na Nette\Application\UI\Form. Dost pravděpodobně máš starou verzi.

spiider
Člen | 162
+
0
-

Tak se omlouvám tímto to nebylo. Jedná se nejspíš o bug kde nejde přepisovat snippet v inkludované šabloně.

Neporadíte pls

spiider
Člen | 162
+
0
-

Zkoušel jsem podle návodu napsat vlastní makro ainclude takto:

$latte = new Nette\Latte\Engine();
		$templ = new \Nette\Templating\FileTemplate();
		$templ->setCacheStorage(new \Nette\Caching\Storages\FileStorage(Nette\Environment::getVariable('tempDir')));
		$templ->presenter = $this;
		$templ->user = $this->getUser();
		$templ->baseUri = $templ->baseUrl = rtrim(Nette\Environment::getHttpRequest()->getUrl()->getBaseUrl(), '/');
		$templ->registerFilter($latte);
		$templ->registerHelperLoader('TemplateHelpers::loader');
		$this->template->it = $templ;

		$macroSet = new Nette\Latte\Macros\MacroSet($latte->parser);
		$macroSet->addMacro(
				'ainclude', '
                $path = pathinfo($presenter->template->getFile());
                $path = $path["dirname"] . "/" . %node.word;
                $it->setFile($path);
                $it->setParams(%node.array);
                $it->render();
        '
		);

		$this->template->registerFilter($latte);

ale hlásí mi to že makro ainclude nezná. Nevíte kde by mohla být chyba?

spiider
Člen | 162
+
0
-

Nikdo neporadi?

spiider
Člen | 162
+
0
-

Momentálně mi to hlásí Undefined variable: control
Chyba je na řádku

$it->render();

v šabloně mám toto:

{ainclude 'select.latte'}

a select.latte obsahuje toto:

<snippet formSnippet>
	{control addAlertForm}
</snippet>

Už mě to fakt trhá žíly pár dní. Díky za rady

spiider
Člen | 162
+
0
-

Tak nakonec sem to rozchodil ani nevím jak teda. Kdyžtak přikládám zdroják kdyby se to někomu hodilo
Šablona:

{snippet formSnippet}
	{control addAlertForm}
{/snippet}

A form:

$form->addSelect("sectors_id", "Sectors", $this->model->getSectors());
$form->addDependentSelectBox("subsectors_id", "Subsector", $form["sectors_id"], callback($this, "getValuesSubSector"));
if ($this->presenter->isAjax())
	$form["subsectors_id"]->addOnSubmitCallback(callback($this, "invalidateControl"), "formSnippet");
$form->addSubmit("save", "Save")
	->onClick[] = callback($this, "addAlert");
return $form;

A metoda pro subselect

public function getValuesSubSector($form) {
		return $this->model->getSubSectors($form['sectors_id']->getValue());
	}

Takhle mi to funguje ani nevím kde byla teda předtím chyba