Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Nepoznati metodi klase

[es] :: Javascript i AJAX :: Nepoznati metodi klase

[ Pregleda: 11358 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

S A J A
Beograd

Član broj: 226539
Poruke: 1800
*.static.sbb.rs.



+407 Profil

icon Nepoznati metodi klase12.10.2016. u 12:33 - pre 32 meseci
Pozdrav svima. Sledi moj problem:

Imam html element <select id='spisak'> i za njega (i slične) sam napravio klasu "combo" koja se kod instanciranja zakači na taj select element i pruža mi neke operacije da pojednostavim rad.

Na primer, imam metod sa kojim mogu da dodajem stavke:

Code:
add_item(id, text) {
     this.html += '<option value="' + id + '">' + naziv + '</option>';
}


i druge slične metode (selektuj prvi, generiši stavke na osnovu niza itd...) i to sve super radi.

Ono što bi mi trebalo jeste da na element prosledim metode koje nisam implementirao.

Na primer, ako neko stavi:

Code:
let combo = new combo('#spisak');
combo.nepoznata_funkcija(x);


da u klasi _nekako_ vidim da je zatražena nepoznata funkcija i da je prosledim direktno na element, otprilike ovako:

Code:
if (nepoznata funkcija) 
    $(this.element).nepoznata_funkcija(x);



Drugim rečima, da sve ono što nisam predvideo od metoda u svojoj klasi, direktno prosledim na objekat koji koristim u klasi.

Jel tako nešto moguće?


 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4534



+705 Profil

icon Re: Nepoznati metodi klase12.10.2016. u 12:53 - pre 32 meseci
Nije.

Baci pogled ovde

http://stackoverflow.com/quest...e-rubys-method-missing-feature

i ovde:

https://developer.mozilla.org/...Reference/Global_Objects/Proxy

Uostalom, zašto prilikom "instanciranja" svoje wrapper klase ne izložiš wrappovani element kao property svoje klase i onda svako može da zove combo.element.nepoznata_funkcija()
 
Odgovor na temu

S A J A
Beograd

Član broj: 226539
Poruke: 1800
*.static.sbb.rs.



+407 Profil

icon Re: Nepoznati metodi klase12.10.2016. u 13:08 - pre 32 meseci
Citat:
jablan
Uostalom, zašto prilikom "instanciranja" svoje wrapper klase ne izložiš wrappovani element kao property svoje klase i onda svako može da zove combo.element.nepoznata_funkcija()


Odlična ideja, tako sam uradio. I to će da mi vrši posao. Mnogo hvala.

Code:
class combo {
    constructor(element) {
        this.element = $(element);
 
Odgovor na temu

plus_minus

Član broj: 289459
Poruke: 2125
*.dynamic.isp.telekom.rs.



+2228 Profil

icon Re: Nepoznati metodi klase12.10.2016. u 13:10 - pre 32 meseci
Citat:
S A J A: Pozdrav svima. Sledi moj problem:

Imam html element <select id='spisak'> i za njega (i slične) sam napravio klasu "combo" koja se kod instanciranja zakači na taj select element i pruža mi neke operacije da pojednostavim rad.

Na primer, imam metod sa kojim mogu da dodajem stavke:

Code:
add_item(id, text) {
     this.html += '<option value="' + id + '">' + naziv + '</option>';
}


i druge slične metode (selektuj prvi, generiši stavke na osnovu niza itd...) i to sve super radi.
...
...
...


Ovaj gore tvoj primer sa `plus_equals` .. je sve samo ne super.

`dodeljivanje` += (ili `assignment`) ... to se ne radi sa DOM nodama/elementima i objektima..

Da je PHP u pitanju, mož' da prođe.. sa '.=' npr.. ili sa `+=` takođe (zavisi), ali, u JS... ako nije tekst (string), ne mož' da bude dobro.

Nikako.

Da ti lepo prvo taj deo naučiš da radiš drugačije...

Evo... Document.createElement() - Web APIs | MDN

about:networking
 
Odgovor na temu

S A J A
Beograd

Član broj: 226539
Poruke: 1800
*.static.sbb.rs.



+407 Profil

icon Re: Nepoznati metodi klase12.10.2016. u 13:27 - pre 32 meseci
Nisam baš razumeo ovo sa += što ne može. Jer meni to normalno radi a kad radi onda ne diram :)

Dakle, gornji primer je pravljen da ilustruje drugi problem, ovo vezano za dodavanje stavki otprilike ovako izgleda:

Code:
this.html = "";
for (var i = 0; i < this.data.length; i++) {
    var id = this.data[i].id;
    var naziv = this.data[i].naziv;
    this.html += '<option value="' + id + '">' + naziv + '</option>';
}
this.element.html(this.html);


Što to ne može tako? U pitanju JESTE string.
 
Odgovor na temu

dusans
Stojanov Dušan
Pančevo

Član broj: 9551
Poruke: 1318
*.dynamic.sbb.rs.



+304 Profil

icon Re: Nepoznati metodi klase12.10.2016. u 13:40 - pre 32 meseci
Šta će ti this.html kad za to možeš da koristiš lokalnu varijablu?
 
Odgovor na temu

plus_minus

Član broj: 289459
Poruke: 2125
*.dynamic.isp.telekom.rs.



+2228 Profil

icon Re: Nepoznati metodi klase12.10.2016. u 14:01 - pre 32 meseci
Citat:
S A J A:
Nisam baš razumeo ovo sa += što ne može. Jer meni to normalno radi a kad radi onda ne diram :)

Dakle, gornji primer je pravljen da ilustruje drugi problem, ovo vezano za dodavanje stavki otprilike ovako izgleda:

Code:
this.html = "";
for (var i = 0; i < this.data.length; i++) {
    var id = this.data[i].id;
    var naziv = this.data[i].naziv;
    this.html += '<option value="' + id + '">' + naziv + '</option>';
}
this.element.html(this.html);


Što to ne može tako? U pitanju JESTE string.


Postoji logika da je svaki mogući do sad ispisani (bukvalno svaki mogući od datuma postanka) JS kod - čist string.
Baš kao i .css.

Što i jeste.

Code (php):

echo(file_get_contents('/my/javascript/dir/script.js'));
 


i dobiješ .. string.

Veliki.

Ali.. postoji i JS logika, SVRHA JS-a .. koja kaže da je <option> zapravo - Objekat. DOM element... noda..

Ako radi ne diraj ga (ukoliko tabla - nije nakrivo).

Šta sa tim <option> tagom radiš posle? (ne verujem da ti je to za `alert` ili console.info() .. )
Popunjavaš i modifikuješ DOM tree.. ?
Praviš dinamički html/formu .. ?

Ako to radiš, pristup kojim radiš jeste totalno pogrešan.

Kosi se sa samom svrhom korišćenja javaskripte u html-u.

U JS, tagovi su elementi ili objekti. Nisu stringovi. Toliko prosto.

To bi iz cuga trebalo da prihvatiš ...

Isto tako taj loop gore..

Spor.

Ovako je brže ..
(a ti zameni c sa i) ...

Code (javascript):


 var c = 0, cc = this.data.length;
 for (; c<cc; c++) {
  // ...
 }
 


about:networking
 
Odgovor na temu

S A J A
Beograd

Član broj: 226539
Poruke: 1800
*.static.sbb.rs.



+407 Profil

icon Re: Nepoznati metodi klase12.10.2016. u 14:04 - pre 32 meseci
Citat:
dusans: Šta će ti this.html kad za to možeš da koristiš lokalnu varijablu?


To je uprošćen primer, imam više metoda pa sam tako stavio. Ne stoji sve to tako zajedno. Deklaracija je u konstruktoru, dodavanje jedne stavke je posebna metoda, dodavanje na osnovu niza je druga metoda, vraćanje svega toga na stranicu je treća metoda...

Sad se premišljam da li unutar klase da stavke vodim kao html string (kao sada) ili da mi sve stoji kao niz pa na kraju da napravim html. Hm... ipak ću da se prebacim na niz, možda mi zatreba neki sort ili slična manipulacija sa podacima. Malo sam skrenuo sa teme, glavna ideja mi je bila da automatizujem operacije nad combo elementima pa sad gledam da pokrijem sve što sam koristio.
 
Odgovor na temu

S A J A
Beograd

Član broj: 226539
Poruke: 1800
*.static.sbb.rs.



+407 Profil

icon Re: Nepoznati metodi klase12.10.2016. u 14:16 - pre 32 meseci
Citat:
plus_minus:
Šta sa tim <option> tagom radiš posle? (ne verujem da ti je to za `alert` ili console.info() .. )
Popunjavaš i modifikuješ DOM tree.. ?
Praviš dinamički html/formu .. ?


Ideja mi je da automatizujem rad sa combo elementima. Na strani su iscrtani prazni <select> elementi a onda ih popunjavam, nekad ručnim podacima a često preko ajax poziva. Zato sam napravio klasu koja mi sve to objedinjuje da smanjim kod. Na primer, kad hoću da popunim listu sa podacima sa servera, ja stavim:

Code:
let izbor = new combo('#izbor');
$.when( ajax({'daj_podatke':''}) ).done(function(x) {
    izbor.add_item('0','Prva stavka');
    izbor.data(x);
    izbor.sort();
    izbor.generate_items();
    izbor.render();
});


Otprilike tako bi to trebalo da radi. Zapravo već i radi tako samo da vidim šta će mi još trebati da pokrijem. Ranije sam za to imao mnogo koda i tako za svaki combo, sad bi da malo uprostim.

Slažem se da su elementi elementi a ne string, samo ja dolazim do tih elemenata tako što napravim string pa ga ubacim negde u DOM. Možda to nije idealno ali meni vrši posao. Nisam profesionalni programer pa gledam da jednostavna rešenja.



 
Odgovor na temu

[es] :: Javascript i AJAX :: Nepoznati metodi klase

[ Pregleda: 11358 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.