Bindung eines Rückrufs in Backbone.js und Undercore.js
-
27-10-2019 - |
Frage
Ich habe den folgenden Code:
initialize: function() {
_.bindAll(this);
var callBack = function(res) {
window.item = new Item(res);
this.render();
};
_.bind(callBack, this);
$.get('/item/parse', {
uri: decodeURIComponent($.urlParam('uri')),
title: decodeURIComponent($.urlParam('title'))
},
callBack
);
},
Die Absicht ist, dass Render () nach Abschluss der $ .get -Funktion aufgerufen werden sollte. Selbst nach der Bindung der Rückruffunktion mit _.bind erhalte ich in der Konsole immer noch "Objekt hat keine Funktionsrenderin". Verwende ich Bind hier fälschlicherweise?
Lösung
_.bind
Gibt eine neue Funktion zurück, also:
callBack = _.bind(callBack, this);
Sie können auch verwenden _.bindAll
, aber du musst es nennen nach Sie definieren die Funktion. Andernfalls gibt es zum Zeitpunkt, an dem Sie anrufen _.bindAll
. Beachten Sie, dass Sie verwenden müssen this.callBack = ...
in diesem Fall, weil sonst this
wird nicht aus Funktionen bestehen.
Verwenden von beiden _.bind
und _.bindAll
ist überflüssig.
Andere Tipps
Normalerweise schreibe ich eine "Load" -Methode auf mein Modell, die ich einen Rückruf als Parameter habe. Dann nenne ich diese Methode aus der Render () -Methode in der Ansicht und mache alles, was ich in der Rückruffunktion tun muss (natürlich wird dieser Rückruf im Modell ausgelöst, nachdem die Daten geladen wurden).