Při změně elementu AJAXové načtení nových hodnot a jejich vypsání

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

Mám záznamy které vypisuji. Chci je ovšem filtrovat pomocí data (o výběr ve formuláři se stará datepicker)

<?php
 $form->addText('den','Vybrat den:')
    ->getControlPrototype()->class('datepicker');
    $form['den']->getControlPrototype()->onChange(callback($this,"filterdate"));
?>

Podle mne by se měl ajaxově tedy volat „filterdate“
ta vypadá takto

<?php
  $values=$form->form->values;
  $model= new MujModel();
    $this->template->pujcky=$model->getZaznamy($values['den']);
  $this->invalidateControl('snippet_obsah_k_prekresleni');
?>

žádný ajaxový požadavek (a hlavně tedy odpověď) se neodešle.Netušíte kde zase moje blbost udělala chybu ?

newPOPE
Člen | 648
+
0
-

Kedze si nepredlozil/la aj JS kod (javascript) ktory by to na strane klienta aj urobil tak Ti len mozem povedat, ze problem bude najskor tam.

Ziadny Javascript ⇒ ziadny ajax ⇒ ziadne volanie ;-)

a este zapis

<?php
	$form['den']->getControlPrototype()->onChange(callback($this,"filterdate"));
?>

sa mi zda trocha divny skor by som povedal ze ->onChange('filterdate') a v HTML by mala byt nastavena fun… filterdate tomu prvku/inputu

Editoval newPOPE (21. 6. 2011 18:52)

22
Člen | 1478
+
0
-

myslím, že unobtrusive way by to vyřešila úplně nejlíp .-)

joe
Člen | 313
+
0
-

@czhDavid:

Motáš dohromady PHP a JavaScript, je to tak jak píše newPOPE. To přiřazení onChange vygeneruje HTML:

<input type="text" onchange="NazevPresenter::filterdate">

Což je samozřejmě nesmysl :-) Takže použij ->onChange('filterdate')

A do JavaScriptu si napiš funkci filterdate(), která bude vytvářet AJAX požadavky. Můžeš použít nějaké řešení v doplňcích, pro který je nutný nějaký JS framework (jQuery, Prototype) a nebo si to napsat sám, bez něj.

bojovyletoun
Člen | 667
+
0
-

quote

<?php
	$form['den']->getControlPrototype()->onChange(callback($this,"filterdate"));
?>

<input n:input=jmeno n:on-click="check!">
Možná bláznivý nápad, ale takováhle feature vypadá cool. Jen vymyslet, co to bude dělat.

Editoval bojovyletoun (21. 6. 2011 22:23)

22
Člen | 1478
+
0
-

osobně se mi v době jQuery moc nelíbí cpát eventy do html tagu.

uestla
Backer | 799
+
0
-

Viděl bych to asi takhle:

Továrna na formulář:

$form->addText('den', 'Vybrat den:')
	->setHtmlId('calendar-day') // vlastnoruční ID kvůli vytažení pomocí jQuery
	->getControlPrototype()->class('datepicker');

Šablona (jelikož používáš datepicker, zákonitě předpokládám, že používáš jQuery :-) ):

<script type="text/javascript">
$(function () {
	$('#calendar-day').live('change', function () {
		// předpokládám použití skriptu pro refresh snippetů
		// (https://componette.org/search/?q=jquery-ajax)
		$.getJSON({link filterDate!}, { 'day': $(this).val() });
	});
});
</script>

A nakonec signál presenteru:

public function handleFilterDate($day)
{
	$model = new MujModel();
	$this->template->pujcky = $model->getZaznamy($day);
	$this->invalidateControl('snippet_obsah_k_prekresleni');
}

Ale z hlediska rady je to špatně, protože za tebe píši kód… Čili doporučuji shlédnout přednášku na webExpu (https://www.youtube.com/watch?…) – je to sice 2 roky zpátky, ale většina toho sedí i na současnou verzi. Podstatné začíná cca v čase 35:30, po Davídkově zmínce o pekelném gastronomickém zážitku >] ).