Při změně elementu AJAXové načtení nových hodnot a jejich vypsání
- czhDavid
- Člen | 14
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
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)
- joe
- Člen | 313
@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
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)
- uestla
- Backer | 799
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 >] ).