Spuštění javascriptu ve snippetu

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

Ahoj,

nahrávám si formuláře ajaxově do modálního okna a potřebuji zajistit spuštění validace při submitu (Live validace a nette jquery ajax z doplňků). Validace při submitu se nespustí, protože není validační funkce na tlačítko navázána (javascript ve snippetu nebyl proveden).

Jakým způsobem toto řešíte? Zkoušel jsem jquery evalScripts() v update snippet ale bez valného úspěchu.

Díky za každou radu.

despiq
Člen | 320
+
0
-

ja davam do nette jquery po updatu snippetu js ktery chci aby se spustilo pri ajaxu

musa
Člen | 28
+
0
-

despiq napsal(a):

ja davam do nette jquery po updatu snippetu js ktery chci aby se spustilo pri ajaxu

Diky, neco podobneho uz delam taky, mam v payloadu prvek ‚js‘ na ktery pak zavolam eval. U validace se ale ten js generuje a „jen tak“ se k nemu nedostanu, navic bych to rad i nejak obecne vyresil.

mkoubik
Člen | 728
+
+1
-

Taky načítam formuláře ajaxem a validace mi normálně fungujou bez jakýhokoliv čarování. Večer naznačim kód.

musa
Člen | 28
+
0
-

mkoubik napsal(a):

Taky načítam formuláře ajaxem a validace mi normálně fungujou bez jakýhokoliv čarování. Večer naznačim kód.

Diky.

mkoubik
Člen | 728
+
0
-

Já mám komponentu, která podle nastavení zobrazuje různé formuláře (obecně komponenty), nebo nic:

<?php
class SettingsComponent extends Control
{
    /** @persistent */
    public $module = null;

    private $form = null;
...

    protected function createComponentForm()
    {
        $this->form = získání komponenty podle persistentnich parametru
        return $this->form;
    }

    public function handleSetModule($module)
    {
        $this->module = $module;
        $this->invalidateControl('settingsComponent');
    }

    public function handleUnsetModule()
    {
        $this->module = null;
        $this->invalidateControl('settingsComponent');
    }

    protected function createTemplate()
    {
        $template = parent::createTemplate();
        $template->setFile(dirname(__FILE__).'/settingsComponent.phtml');
        return $template;
    }

    public function render()
    {
        $this->template->module = $this->module;
        return $this->template->render();
    }
}
<?

(kód je zkrácen, obsahuje složitější logiku pro získávání komponent)
A šablona:

{snippet settingsComponent}
{if $module !== null}
    <div class="overlay"></div>
    <div class="modal">
        <a href="{link unsetModule!}" class="ajax modal-close">Zavřít</a>
        {widget form}
    </div>
{/if}
{/snippet}

Ve formuláři se mi pak objeví onsubmit"return nette.validateForm(this)", nenašel jsem, kde je to definováno, ale funguje to. Další detaily, které by na to mohly mít vliv: na stránce už jeden formulář je, než se načte ten ajaxový, pak tam jsou dva (jeden v modálním okně a jeden skrytý). Používám jquery, jquery.livequery, jquery.nette a jquery.ajaxform.

Honza Kuchař
Člen | 1662
+
0
-

A co toto?

{snippet nazev}
<script type="text/JavaScript"> alert("bla"); </script>
{/snippet}

Editoval honzakuchar (29. 4. 2010 22:32)

mkoubik
Člen | 728
+
0
-

Teď mi to docvaklo – fór je samozřejmě v tom jquery.livequery, kretý automaticky nastavuje listenery i na elementy přidané dynamicky. Takže určitě je stojí za to použít.

Honza Kuchař
Člen | 1662
+
0
-

jquery.livequery používám tak nějak automaticky :-) I když je to nějaký ten kb navíc. Ušetří hromadu práce. Opravdu! Hromadu!

Editoval honzakuchar (29. 4. 2010 23:37)