如何将功能绑定到骨干路由器?

时间:2014-01-01 18:08:02

标签: javascript backbone.js underscore.js

我正在尝试将router绑定到路由器中的方法。这是router

define(function(require) {

  var Backbone = require('backbone');
  var User = require('models/user.model');

  var Router = Backbone.Router.extend({
    user: null,

    initialize: function() {
      _.bind(this.updateUser, this);
      Backbone.on('userAuthenticated', this.updateUser);

      this.user = new User();
      this.user.fetch();
    },

    updateUser: function() {
      debugger;
    }
  });

  return Router;
});

我将方法updateUser绑定到我的router。触发事件userAuthenticated后,我想在updateUser中运行代码。事件被抛出并且方法被调用,但是当我进入updateUser方法时,我的this不是我期望的router,而是全局对象。我做错了什么?

1 个答案:

答案 0 :(得分:1)

我在几条评论中指出_.bind()会返回一个新函数,您的示例不会将其分配给任何函数。但是,更简单的解决方案是使用on()的可选第三个参数:

Backbone.on('userAuthenticated', this.updateUser, this);

Backbone documentation