5 Stimmen

Ist das Backbone-Modell nicht definiert?

Ich verstehe nicht, warum this.model in view.initialize() definiert sein würde, wenn ich this.model.fetch() darauf ausführe, aber nicht in view.render().

Chrome Developer Tools Screenshot

define([
  'jquery',
  'underscore',
  'backbone',  
  'text!templates/example.html'
], function($, _, Backbone, exampleTemplate){

  var exampleView = Backbone.View.extend({
    el: $('body'),
    initialize: function() {
      this.model.set({ _id: this.options.user_id });
      this.model.fetch({
        success: this.render,
        error: function(model, response) {
          console.log('FEHLER BEIM ABFRAGEN DES MODELLS');
          console.log(model);
          console.log(response);
        }
      });
    },
    render: function() {
      console.log('HALLO VON RENDER');
      console.log(this.model);
      console.log('AUF WIEDERSEHEN VON RENDER');
    }
  });

  return exampleView;

});

8voto

Bobby Punkte 18007

Es liegt daran, dass das this anders gebunden wird, weil render als Callback verwendet wird. Setzen Sie die folgende Zeile als erste Zeile in Ihre initialize-Methode, um das this für die render-Methode an die aktuelle Ansicht zu binden:

_.bindAll(this,"render");

Underscore.js bindAll Funktion

Bindet eine Reihe von Methoden des Objekts, die durch methodNames angegeben sind, um in dem Kontext dieses Objekts ausgeführt zu werden, wann immer sie aufgerufen werden. Sehr praktisch zum Binden von Funktionen, die als Ereignishandler verwendet werden sollen, die sonst mit einem recht nutzlosen this aufgerufen würden.

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