[Prototype] Eigen callback, maar hoe uit te voeren?

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Hiemstra
  • Registratie: Januari 2009
  • Laatst online: 09-04-2023
Hi,

Ik kom er maar niet uit hoe ik de functie die ik in me settings meegeef moet uitvoeren met de nodige parameters. voor betere uitleg zie de code (wel in omgehakt om klein te houden):


JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
var Validation = Class.create();
    Validation.prototype = {

    initialize : function (form, errors, settings) {
        this.form = form;
        this.errors = errors;
        
        if (this.errors)
            this.raiseErrors();
    },
    
    raiseErrors : function () {
        
        /* hier wil ik dus naar de this.settings.userCallBack roepen, 
           maar via eval werkt dit niet, en ik wil ook een aantal paramters 
           er aan meegeven (3 stuks). Daarnaast kan de functie in deze class 
           zitten maar kan er ook buiten zitten. */
        
    },
    
    setSettings : function (settings) {
        this.settings = {
            hasErrorClass   : 'validation-error',
            userCallBack    : 'test'
        }
        
        Object.extend(this.settings, settings || {});
    },
    
    /* mn custom callback functie */
    test : function () {
        console.log('hallo');
    }
}


Bvd, ik heb al enige tijd gegoogled maar ik heb geen flauw idee op wat voor termen ik moet zoeken aangezien ik niet weet hoe deze manier heet :')

--- Edit --
Na wat gefriemel kom ik op het volgende, wat wél werkt maar absoluut niet netjes is (in mijn ogen)
JavaScript:
1
eval('this.'+this.settings.userCallBack+'' + '("' + e + '");');


Dit zal ook alleen werken als de functie daadwerkelijk in dezelfde class zit, maar daar zou ik nog een kleine if statement om heen kunnen doen. Maar weet iemand een makkelijkere manier?

[ Voor 14% gewijzigd door Hiemstra op 23-03-2009 13:50 ]

The future belongs to those who believe in the beauty of their dreams


Acties:
  • 0 Henk 'm!

  • Juup
  • Registratie: Februari 2000
  • Niet online
Prototype bind
JavaScript:
1
var callbackMetArgumenten = this.settings.userCallBack.bind(arg1, arg2);

[ Voor 40% gewijzigd door Juup op 23-03-2009 14:50 ]

Een wappie is iemand die gevallen is voor de (jarenlange) Russische desinformatiecampagnes.
Wantrouwen en confirmation bias doen de rest.


Acties:
  • 0 Henk 'm!

  • Hiemstra
  • Registratie: Januari 2009
  • Laatst online: 09-04-2023
Juup schreef op maandag 23 maart 2009 @ 14:48:
Prototype bind
JavaScript:
1
var callbackMetArgumenten = this.settings.userCallBack.bind(arg1, arg2);
Ik zie eerlijk gezegt niet hoe dat zou moeten werken, hoe roep ik nou de functie aan dan?

The future belongs to those who believe in the beauty of their dreams


Acties:
  • 0 Henk 'm!

Verwijderd

Aan de eval te zien pass je de callback functie als een string in settings. Niet doen. Gebruik gewoon een function reference.

Acties:
  • 0 Henk 'm!

  • Hiemstra
  • Registratie: Januari 2009
  • Laatst online: 09-04-2023
Verwijderd schreef op maandag 23 maart 2009 @ 15:35:
Aan de eval te zien pass je de callback functie als een string in settings. Niet doen. Gebruik gewoon een function reference.
o-m-g... zo zie je maar weer, als je te lang met je hoofd in 1 stuk code zit dan kom je er niet meer uit.. Bedankt voor je input! topic mag wat mij betreft dicht.

The future belongs to those who believe in the beauty of their dreams