Invalidace se odešle, ale snippet nepřekreslí

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Tomáš Votruba
Moderator | 1114
+
0
-

Používám klasické překreslování snippetů, ale nedaří se mi je rozjet.
Signál se odešle, handle provede, v Chrome debug baru v Network mám výsledný snippet, ale na stránce se už neobjeví.

Používám jquery.1.8.2.min.js a aktuální verzi nette.ajax.js. Co dělám špatně? Díky

presenter

protected function createComponentTestForm()
{
	$form = new Form;
	$form->addSelect("subject_id", "Předmět testu:", array("a", "b", "c"));
	$form->addSelect("subject_section_id", "Kapitola:", array("A", "B", "C"));
	return $form;
}

public function handleOnSelectSubjectLoad($id)
{
	$form = $this->getComponent("testForm");
	$form["subject_section_id"]->setItems(array($id, 1, 2, 3));
	$this->invalidateControl("subjectSectionSnippet");
}

šablona

	{form testForm}
		{input subject_id}
		{snippet subjectSectionSnippet}
			{input subject_section_id}
		{/snippet}
	{/form}

	<script type="text/javascript">
		$("form #" + {$_form["subject_id"]->htmlId}).on('change', function(event) {
			$.get({link onSelectSubjectLoad!}, {"id": $(this).val()});
		});
	</script>
Majkl578
Moderator | 1364
+
0
-

Protože nevoláš $.nette.ajax, ale $.get, tudíž se neprovede událost pro překreslení snippetů.

Zkus to tedy takto:

$('#' + {$_form["subject_id"]->htmlId}).on('change', function(event) {
	$.nette.ajax({
		url: {link onSelectSubjectLoad!},
		data: {
			id: $(this).val()
		}
	});
});