Překreslení závislého select boxu
- JARDA001
- Člen | 4
Zdravím. Jsem začátečník a narazil jsem na problém se závislým select boxem. Po načtení stránky je vše ve výchozím stavu, ale po vybrání položky z prvního selectu se neprovede překreslení té následující. Pokud kliknu na submit button, tak se samozřejmě formulář odešle (včetně provvedení finálních akcí, což samozřejmě nechci) a vše vytvoří znovu, avšak v závislém boxu jsou již potřebné položky. Formulář jsem vytvářel přesně dle tohoto návodu
deleteBook.latte:
{form deleteBookForm}
{label author}{/label}
{input author}
{snippet title}
{label title}{/label}
{input title}
{/snippet}
{input submit}
{/form}
CatalogPresenter.php
<?php
public function beforeRender () {
parent::beforeRender ();
$this->template->_form = $this['deleteBookForm'];
}
public function handleInvalidate ($value) {
$this['deleteBookForm']['title']->setItems ($this->catalogManager->getTitles ($value))->setPrompt ('Vyberte titul');
$this->redrawControl ('title');
}
protected function createComponentDeleteBookForm ($name) {
$form = new Form;
$this [$name] = $form;
$authors = $this->catalogManager->getAuthors ();
$form->addSelect ('author', 'Vyberte autora: ', $authors)->setPrompt('Vyberte autora');
$form->addSelect ('title', 'Vyberte titul: ', $this->catalogManager->getTitles ($form['author']->value))->setPrompt ('Vyberte nejdříve autora');
$form->addSubmit ('submit', 'Vyřadit z databáze');
$form->onSuccess [] = $this->deleteBookFormSubmitted;
return $form;
}
public function deleteBookFormSubmitted (UI\Form $form, $vals) {
dump ($vals);
{
?>
Z githubu jsem stáhl soubor nette.ajax.js, který mám připojený
v hlavní šabloně
<script src="{$basePath}/js/nette.ajax.js"></script>
a toto
<script>
$(function(){
$.nette.init();
$('select[name=title]').change(function () {
$.nette.ajax({
url: {link invalidate!},
data: {
'value': $('select[name=title]').val(),
}
});
});
});
</script>
mám umístěné po všech čertech, a stejně se nic nemění.
Neuměl by mi prosím někdo pomoc? Pročetl jsem tu několik vláken, hledám to na netu ale stále se mi to nedaří vyřešit. Budu moc vděčný za pomoc. Díky.
- JARDA001
- Člen | 4
Chyba se vloudila, nicméně ať provedu úpravu na
<script>
$(function(){
$.nette.init();
$('select[name=author]').change(function () {
$.nette.ajax({
url: {link invalidate!},
data: {
'value': $('select[name=title]').val(),
}
});
});
});
</script>
či do obou dám author, tak se stejně nic nemění.
Jinak pro jistotu, kde že by měla být uvedena ta AJAX fce? Aby to nebyla zase další moje blbost…
- JARDA001
- Člen | 4
Tak sa omlouvám, nakonec to byla vážně moje blbost. Já tu AJAX fci měl umístěnou v dílčí šabloně. Zkusil jsem ji přesunout do script bloku v hlavní šabloně (viz jak píšeš) a už to jede byť Opera (12.16) píše ve vývojářské liště toto:
Syntax error at line 487 while loading: syntax error
url: {link invalidate!},
-----------------^
Každopádně děkuju moc za pomoc a rady a omlouvám se za ochuzení o čas.
- petr.pavel
- Člen | 535
Kam spěcháš, ještě jsi neskončil :-)
To, že ti Opera ukazuje kód z Latte, znamená, že ten Latte kód máš
někde, kde se na něj Latte nedostane. Tipuju, že v souboru .js, který
vracíš rovnou a ne přes Nette. Takže musíš zařídit, aby se ti
parsoval.
Osobně si url předávám přes data atribut:
<select name="author" data-url="{link invalidate!}">
$('select[name=author]').change(function () {
$.nette.ajax({
url: $(this).data('url'),
...