骨干模型未定义?

时间:2012-01-10 16:35:56

标签: javascript backbone.js

我无法理解为什么this.model会在view.initialize()中定义,当我在它上面运行this.model.fetch()而不是在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('ERROR FETCHING MODEL');
          console.log(model);
          console.log(response);
        }
      });
    },
    render: function() {
      console.log('HELLO FROM RENDER');
      console.log(this.model);
      console.log('GOODBYE FROM RENDER');
    }
  });

  return exampleView;

});

1 个答案:

答案 0 :(得分:8)

这是因为this的绑定方式不同,因为渲染被用作回调,将以下行作为initialize方法的第一行,将this绑定到render方法的当前视图:

_.bindAll(this,"render");

Underscore.js bindAll function

  

将methodNames指定的对象上的多个方法绑定到   无论何时调用它们,都要在该对象的上下文中运行。非常   方便用于将用作事件的绑定函数   处理程序,否则会被相当无用的调用。