[js] overload function

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • PdeBie
  • Registratie: Juni 2004
  • Laatst online: 12:08
Hoi allen,

--edit--
ik vermeld in de titel override, maar bedoel natuurlijk overload.
Need coffee. :z
--end edit--

ik heb een functie waarin ik een autocomplete koppel aan een textbox.
Deze functie wil ik overloaden door een andere functie, maar hier kom ik niet helemaal uit.

Ik heb tot dusver dit:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function RegisterAJAXAutoCompletePlaces(control, postbackcontrol) {
    $(function () {
        $(control).autocomplete({
            select: function (event, ui) {
                var selectedObj = ui.item;
                $(control).val(selectedObj.value);
                __doPostBack(postbackcontrol, '');                    
            },
            source: function (request, response) {
                $.ajax({
                    // hier gebeurt ook nog wat
                });
            },
            minLength: 2,
            autoFocus: true
        });
    });
}


En wat ik dacht te moeten doen om te overloaden is onderstaande code (zoals het in C# werkt). Dat ik dus niet overal de parameter 'performPostBack' moet meegeven (omdat het op heel veel plaatsen voorkomt). Echter als ik RegisterAJAXAutoCompletePlaces(control, postbackcontrol) aanroep, komt hij in de functie met de variabele postbackcontrol undefined.
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function RegisterAJAXAutoCompletePlaces(control, postbackcontrol) { RegisterAJAXAutoCompletePlaces(control, postbackcontrol, true); }
function RegisterAJAXAutoCompletePlaces(control, postbackcontrol, performPostBack) {
    $(function () {
        $(control).autocomplete({
            select: function (event, ui) {
                var selectedObj = ui.item;
                $(control).val(selectedObj.value);
                if(performPostBack)
                    __doPostBack(postbackcontrol, '');                    
            },
            source: function (request, response) {
                $.ajax({
                    // hier gebeurt ook nog wat
                });
            },
            minLength: 2,
            autoFocus: true
        });
    });
}

[ Voor 4% gewijzigd door PdeBie op 16-11-2012 09:32 ]


Acties:
  • 0 Henk 'm!

  • Tarilo
  • Registratie: December 2007
  • Laatst online: 09-07 15:45
Volgens mij bestaat er geen overloading in JavaScript, dus gaat dit op deze manier nooit werken.

Je zou een default waarde aan performPostBack kunnen meegeven, dat zou hetzelfde effect hebben

Acties:
  • 0 Henk 'm!

  • PdeBie
  • Registratie: Juni 2004
  • Laatst online: 12:08
ja ik kwam er inmiddels ook achter. Heb het nu als volgt opgelost:

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function RegisterAJAXAutoCompletePlaces(control, postbackcontrol, doPostBackOnSelect) {
    $(function () {
        $(control).autocomplete({
            select: function (event, ui) {
                var selectedObj = ui.item;
                $(control).val(selectedObj.value);
                var doPostBack = ((doPostBackOnSelect == undefined) || (doPostBackOnSelect === true)); //default is true
                if (doPostBack) { __doPostBack(postbackcontrol, ''); }
            },
            source: function (request, response) {
                $.ajax({
                    // hier gebeurt ook nog wat
                });
            },
            minLength: 2,
            autoFocus: true
        });
    });
}

Acties:
  • 0 Henk 'm!

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 18-03 09:33

_Thanatos_

Ja, en kaal

Btw, als je een waarde met dubbele = vergelijkt met undefined, test je ook op de waarde null. Dan weet je dat het werkt zoals het technisch hoort als je een keer een expliciete null aan die parameter geeft. Dus als je em op null zet, zal in jouw geval doPostBack true worden.

日本!🎌


Acties:
  • 0 Henk 'm!

  • PdeBie
  • Registratie: Juni 2004
  • Laatst online: 12:08
correct. staat ook in commentaar achteraan dat de default true is. Dus als de parameter null is, dan doet hij een postback zoals gewenst :)

Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Waarom een postback overigens? Kun je niet beter een simpele webservice neerzetten die de autocomplete voor je aanvult. Is een stuk meer lichtgewicht dan een hele postback die aan de serverkant de hele control tree moet rebuilden voor elke request.

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info

Pagina: 1