NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
Petr Čech
Tvůrce
Avatar
Petr Čech:6.7.2017 15:21

Zdravím, jak prosím přinutím nette.ajax.js AJAXově odeslat formulář? Mám Bootstrap 4 (nebo Bootstrap 3, je to fuk) formulář, který se standardně korektně zpracuje. Když formuláři přidám třídu ajax, měl by se podle dokumentace odeslat AJAXově. Ale nic se neděje, resp. odešle se klasickým způsobem.
Jak ho mám přinutit, aby se odesílal Ajaxově?
Samozřejmě si to můžu napsat sám, ale mám pocit, že by to mělo fungovat a něco dělám špatně.
Nechci jen odeslat data, chci, aby to umělo nette vychytávky jako snippety.
// požívám jQuery 3.2.1

Editováno 6.7.2017 15:22
Odpovědět
6.7.2017 15:21
the cake is a lie
Avatar
Jindřich Máca
Tvůrce
Avatar
Odpovídá na Petr Čech
Jindřich Máca:6.7.2017 15:36

Zdravím, to by mělo normálně fungovat, pokud jsi tu knihovnu dobře inicializoval. Bez kódu Ti k tomu asi víc nepovím. :)

 
Nahoru Odpovědět
6.7.2017 15:36
Avatar
TomasGlawaty
Člen
Avatar
Odpovídá na Petr Čech
TomasGlawaty:6.7.2017 15:37

Ahoj,
Voláš někde $.nette.init(); ?
btw. jen tak naokraj, snippety fungují i s ručně zavolaným AJAXem (musí bý ale volany přes $.nette.ajax({}) ) :)

Editováno 6.7.2017 15:37
 
Nahoru Odpovědět
6.7.2017 15:37
Avatar
Petr Čech
Tvůrce
Avatar
Odpovídá na Jindřich Máca
Petr Čech:6.7.2017 15:45

Ano, vše kromě formulářů funguje korektně- třeba ajaxové odkazy fungují normálně.
formulář:

public function createComponentItemsPerPage()
    {
        $form = new Base();
        $form->ajax = true; // přidá class="ajax"
        $form->addSelect('items', 'Položek na stránku: ', $this->itemsPerPage)
            ->setDefaultValue(20);
        $form->addSubmit('set', 'OK');
        $form->onSuccess[] = [$this, 'onItemsPerPageChange'];

        return $form;
    }

JS:

$.nette.init();
$.nette.ext('spinner', {
        start: function (xhr, settings) {
            // show spinners for .show-spinner links
            $el = $(settings.nette.ui);
            if ($el.is('.show-spinner')) {
                spinner.show();
            }
        },
        complete: spinner.hide,
    });
Nahoru Odpovědět
6.7.2017 15:45
the cake is a lie
Avatar
Petr Čech
Tvůrce
Avatar
Petr Čech:6.7.2017 15:48

Ještě vygenerované HTML:

<form action="/contacts/detail/1" method="post" class="form-normal ajax" id="frm-activityList-itemsPerPage">
        <div class="form-group">
                <label for="frm-activityList-itemsPerPage-items">Položek na stránku: </label>
                <select name="items" id="frm-activityList-itemsPerPage-items" class="form-control">
                        <option value="10">10</option>
                        <option value="20">20</option>
                        <option value="50" selected="">50</option>
                        <option value="100">100</option>
                </select>
        </div>
        <input type="submit" name="set" value="OK" class="btn btn-primary">
        <input type="hidden" name="_do" value="activityList-itemsPerPage-submit">
        <!--[if IE]><input type=IEbug disabled style="display:none"><![endif]-->
</form>

onItemsPerPageChan­ge() volá jen $this->redrawControl();

Editováno 6.7.2017 15:49
Nahoru Odpovědět
6.7.2017 15:48
the cake is a lie
Avatar
Petr Čech
Tvůrce
Avatar
Petr Čech:6.7.2017 16:28

Problém vyřešen. Ačkoliv to nikde není zmíněno, nette.ajax.js vyžaduje netteForms.js (který je určený k validaci), proto ho nemá smysl používat, když mám vlastní validaci.

Editováno 6.7.2017 16:28
Nahoru Odpovědět
6.7.2017 16:28
the cake is a lie
Avatar
Jurajs
Člen
Avatar
Odpovídá na Petr Čech
Jurajs:6.7.2017 16:35

A načem pracuješ jestli se můžu zeptat?

 
Nahoru Odpovědět
6.7.2017 16:35
Avatar
Petr Čech
Tvůrce
Avatar
Petr Čech:6.7.2017 16:35

Není třeba používat celé netteFroms, stačí primitivně:

Nette={};
Akceptované řešení
+5 Zkušeností
Řešení problému
Nahoru Odpovědět
6.7.2017 16:35
the cake is a lie
Avatar
Petr Čech
Tvůrce
Avatar
Odpovídá na Jurajs
Petr Čech:6.7.2017 16:36

Je to paginace úkolů a chtěl jsem ji udělat AJAXovou

Nahoru Odpovědět
6.7.2017 16:36
the cake is a lie
Avatar
T-fon
Člen
Avatar
Odpovídá na Petr Čech
T-fon:6.11.2017 8:58

Kam mám prosimtě napsat Nette={}; abych nemusel použít netteForms?

 
Nahoru Odpovědět
6.11.2017 8:58
Avatar
Petr Čech
Tvůrce
Avatar
Odpovídá na T-fon
Petr Čech:6.11.2017 12:12

Myslím, že to patří buď na konec nette.ajax.js nebo na začátek tvého skriptu. Už jsem to zapomněl. Dokonce mají na githubu ode mě pull request, ale tím se nikdo už asi čtvrtý měsíc nezabývá :D

Nahoru Odpovědět
6.11.2017 12:12
the cake is a lie
Avatar
T-fon
Člen
Avatar
Odpovídá na Petr Čech
T-fon:6.11.2017 12:32

Dobře, díky, budu zkoušet.

 
Nahoru Odpovědět
6.11.2017 12:32
Avatar
Odpovídá na Petr Čech
Ondřej Cháb:26.7.2019 8:52

Téma už je starší, nicméně jsem teď řešil to samé v Nette 3.
Přidání následujícího kódu před $.nette.init(); pomohlo :)

Nette = {
initForm: function () {}
};

 
Nahoru Odpovědět
26.7.2019 8:52
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 13 zpráv z 13.