Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Plugin jQuery vrací spatný objekt, když hobzavolam vícekrát

Aktivity
Avatar
Robin Mokrý
Člen
Avatar
Robin Mokrý:27.7.2020 20:15

Ahoj,
učím se s jQuery a snažím se vyrobit univerzální plugin slideru. Vše funguje jak má až do chvíle, kdy funkci zavolám vícekrát.

Problém může být možná už v základním kódu:

$('.nt-slider-hero').ntSlider({});

$('.nt-slider-references').ntSlider({});


;(function ($, window, document, undefined) {

var obj = ({
    slider: null,
    mainFc: function (slider, settings) {
        this.slider = slider;
        console.log(this.slider);
        $(window).on('load resize', function () {
            console.log(obj.slider);
        })
    }
});


$.fn.ntSlider = function (config) {
    var settings = $.extend({

    }, config);

    obj.mainFc(this, settings);

}

})(jQuery, window, document);

Klasické volání mi správně vrátí nejprve první a pak druhý objekt, volání v rámci load a resize mi však vrátí vždy ten poslední objekt, na který funkci volam (v tomto případě tedy 'nt-slider-references'.

Celý kód je zde: https://jsfiddle.net/…/5njzL4b9/7/

Moc díky za případné odpovědi a tipy.

 
Odpovědět
27.7.2020 20:15
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:28.7.2020 8:07

Samozrejme, protoze nevytvaris novy objekt, ale pouzivas jeden a tentyz obj jako globalni promenou.

function sliderClassFunc()
    {
    this.mainFc = function (item, settings) {
        item.slider = 'tady uplne nevim, o co go, ale oddelil bych strukturu dat od funkci';
        console.log(item.slider); // pres item
        console.log(my_slider_list[0].slider); // pres globalni promenou
        $(window).on('load resize', function () {
            console.log(item.slider);
            console.log(my_slider_list[0].slider);
        })
    }

function sliderClass()
    {
    this.slider = null,
    }

var my_slider_fn, my_slider_list;
my_slider_fn = new sliderClassFunc()
i = 0;
my_slider_list = [];
my_slider_list[i] = new sliderClass(); i++;
my_slider_list[i] = new sliderClass(); i++;
my_slider_list[i] = new sliderClass(); i++;
my_slider_fn.mainFc(my_slider_list[1], {'settings'});

Vysledkem bude, ze v pameti tohle zabere mene mista a bude snadnejsi delat export dat. Treba, kdybys takhle resil padajici vlocky nebo nejake pohybujici castice a chtel si ulozit aktualni polohy, tak by se to dalo resit i jsonem nad objektem s daty.

Editováno 28.7.2020 8:10
 
Nahoru Odpovědět
28.7.2020 8:07
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:28.7.2020 8:14

Kdyby slo o padajici vlocky, tak bys udelal cyklus a predal mu link na promenou s daty a ta funkce by prevzala objekt a pomenila data. Coz mi prijde lepsi, prehlednejsi, nez, kdyz s temi daty pracujes primo v objektu. Samozrejme pojmenovani promenych jsem nezvolil uplne nej, ale jde o demo :)

i_end = my_slider_list.length;
foreach (i=0; i<i_end; i++)
{
my_slider_fn.mainFc(my_slider_list[i], {'settings'});
}
 
Nahoru Odpovědět
28.7.2020 8:14
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:28.7.2020 8:17
function sliderClass(n) // n = i pro my_slider_list[i]
    {
    this.n = n; // ja tam jeste davam i, abych vedel, kolikate je v tom poli
//my_slider_list; to muze byt sikovne, kdyz hledas kolizi a potrebujes objekt z pole odstranit.
    this.slider = null,
    }
 
Nahoru Odpovědět
28.7.2020 8:17
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 4 zpráv z 4.