2 Stimmen

Gibt es einen besseren Weg, um "dieses" Objekt an eine Callback-Funktion zu übergeben?

Ich bin neu bei backbonejs. Ich versuche, die richtige this Objekts an eine Callback-Funktion, wobei diese Funktion eine Methode der Ansicht ist.

Meine derzeitige Lösung:

APP.LocationFormView = APP.View.extend({
    initialize: function () {    
        if (navigator.geolocation) {
            var that = this;

            var success = function(position) {
                _.bind(that.onSuccessUpdatePos, that, position)();
            };

            var error = function(error) {
                _.bind(that.onFailUpdatePos, that, error)();
            }

            navigator.geolocation.getCurrentPosition(success, 
                                                     error);
        } else {

        }
    },

    onSuccessUpdatePos: function(position) {
        // We can access "this" now
    },

    onFailUpdatePos : function(error) {
        // We can access "this" now
    }
});

Ist dies der richtige Weg, um das zu erreichen, was ich will? Gibt es eine weniger ausführliche Lösung für dieses Problem?

5voto

abraham Punkte 43978

Ich würde es folgendermaßen machen. Ein schöner Aspekt von bindAll ist, dass, wenn Sie zusätzliche Funktionen zu LocationFormView haben sie automatisch this gebunden.

APP.LocationFormView = APP.View.extend({
    initialize: function () {   
        _.bindAll(this); 
        if (navigator.geolocation) {
            navigator.geolocation.getCurrentPosition(this.onSuccessUpdatePos, 
                                                     this.onFailUpdatePos);
        } else {

        }
    },

    onSuccessUpdatePos: function(position) {
        // We can access "this" now
    },

    onFailUpdatePos : function(error) {
        // We can access "this" now
    }
});

2voto

Ry- Punkte 208020

_.bind ist für eine spätere Bindung bestimmt. Normalerweise würden Sie wie folgt vorgehen:

that.onSuccessUpdatePos(position); // that is already the context

Stattdessen können Sie sie auch direkt weitergeben:

var success = _.bind(that.onSuccessUpdatePos, that, position);
var error   = _.bind(that.onFailUpdatePos, that, error);

navigator.geolocation.getCurrentPosition(success, error);

Das heißt, wenn Ihnen das klarer erscheint als die "manuelle" Lösung.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X