/ Forside / Teknologi / Udvikling / Java Scripts / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java Scripts
#NavnPoint
molokyle 5410
Klaudi 2799
smorch 2439
kim 1360
Harlekin 1134
bentjuul 984
gibson 800
severino 695
Random 675
10  konsulent.. 626
Problemer med oop i js og prototype
Fra : Lars


Dato : 26-05-06 15:20

Følgende scriptstump bliver ved med at påstå at this.apply ikke er
en funktion, men hvordan henviser jeg så til funktioner i en klasse?
Jeg bruger prototype.

var ConfirmBoxes = Class.create();

ConfirmBoxes.prototype = {

   initialize: function() {
      // void
   },

   init: function() {
      this.apply('confirm');
      this.apply('delete');
   },

   apply: function(sClass) {
      var oLinks = getElementsByClass(sClass);
      if (!oLinks) return;
      var n = oLinks.length;
      for (var i=0; i<n;i++) {
         return this.create(oLinks[i]);
      }
   },

   create: function(elm) {
      var sTitle = elm.title;
      Event.observe(elm, "click", this.ask(sTitle))
   },

   ask: function(sTitle) {
      if (!sTitle) {
         return confirm("Er du sikker?");
      }
      else {
         return confirm(sTitle);
      }
   }
}

var myConfirmBoxes = new ConfirmBoxes();
Event.observe(window, "load", myConfirmBoxes.init);


 
 
Lasse Reichstein Nie~ (26-05-2006)
Kommentar
Fra : Lasse Reichstein Nie~


Dato : 26-05-06 17:31

"Lars" <lsolesen@gmail.com> writes:

> Følgende scriptstump bliver ved med at påstå at this.apply ikke er
> en funktion,

Så er det nok rigtigt.

> men hvordan henviser jeg så til funktioner i en klasse?

Der er ikke klasser i Javascript. Prototype.js-biblioteket forsøger
at lave noget der ligner, men jeg kan ikke sige hvad de forsøger
at opnå.

Lad os se på hvad du forsøger at gøre ...

> Jeg bruger prototype.

Det bliver det nok ikke nemmere af. (Det er ikke en af mine favoritter).

> var ConfirmBoxes = Class.create();
>
> ConfirmBoxes.prototype = {
>
>    initialize: function() {
>       // void
>    },
>
>    init: function() {
>       this.apply('confirm');
>       this.apply('delete');

Her har vi formodentlig synderen.

Hvis denne funktion kaldes som et metode på et ConfirmBoxes-objekt,
så vil den have en apply-funktion, jvf følgende funktion:

>    },
>
>    apply: function(sClass) {


Det er bare ikke tilfældet. Funktionen kaldes som en rå funktion
der ikke er en metode på noget objekt (eller sandsyligvis som
en metode på 'window'-objektet):

> Event.observe(window, "load", myConfirmBoxes.init);

Her giver du den rå funktion med som tredje-argument. Funktionsværdien
der giver med har *ingen* forbindelse til myConfirmBoxes.

Du kunne bruge prototype.js-metoden bind:
Event.observe(window, "load", myConfirmBoxes.init.bind(myConfirmBoxes));

(eller endda:
Event.observe(window, "load",
myConfirmBoxes.init.bindAsEventListener(myConfirmBoxes));
hvor metoden får event'en med som argument, hvilket denne metode
dog er ligeglad med.)

HTH, HAND!
/L
--
Lasse Reichstein Nielsen - lrn@hotpop.com
DHTML Death Colors: <URL:http://www.infimum.dk/HTML/rasterTriangleDOM.html>
'Faith without judgement merely degrades the spirit divine.'

Lars (26-05-2006)
Kommentar
Fra : Lars


Dato : 26-05-06 21:56

Tak for den gode forklaring. Det giver jo mening så.

Når du nu ikke bryder dig om prototype, har du så en anden favorit,
inden jeg skriver alle mine ting om til at bruge prototype (som jeg
faktisk troede var ret smart)?


Lars (28-05-2006)
Kommentar
Fra : Lars


Dato : 28-05-06 16:15

Nu har jeg skrevet det lidt om - og jeg har nu brugt YAHOO. Jeg har
fået det til at virke - altså sådan nogenlunde. Nedenstående kode
søger ganske vist det hele igennem for links med klassen "delete", og
den skriver en confirmbox. Desværre submitter den siden selvom man
klikker på cancel (Mozilla). Hvad kan det skyldes?

var confirmboxes = {

   init: function() {
      confirmboxes.apply("delete");
   },

   apply: function(sClass) {
      var elements = YAHOO.util.Dom.getElementsByClassName(sClass, "a",
"content");
      if (!elements) return;
      var n = elements.length;
      for (var i=0; i<n;i++) {
         YAHOO.util.Event.addListener(elements[i], "click", function() {
            return confirm("Er du sikker?");
         });
      }
      return false;
   },
   
}

YAHOO.util.Event.addListener(window, "load", confirmboxes.init);


Lars (02-06-2006)
Kommentar
Fra : Lars


Dato : 02-06-06 10:59

<snip>

> Desværre submitter den siden selvom man
> klikker på cancel (Mozilla). Hvad kan det skyldes?

<snip kodestump>

Skulle annullere event-handleren igen. Yahoo har også en funktion til
det, og så virker det.

--
Lars Olesen


Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408847
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste