如何将我的路由器绑定到我的方法 - Backbonejs

时间:2013-11-30 16:25:29

标签: javascript backbone.js

我正在尝试将方法绑定到我的Backbone路由器。这是我的班级:

define(function(require) {
  'use strict';

  var Backbone = require('backbone');
  var Header = require('views/header.view');
  var MainBody = require('views/main.body.view');

  var Router = Backbone.Router.extend({
    currentView: null,
    routes: {
      "about": "about"
    },

    initialize: function() {
      Backbone.on('location', this.test);
      debugger;
      _.bindAll(this, 'test');
    },

    about: function() {
      var header = new Header();
      $('#header').html(header.render().el);
    },

    test: function(data) {
      this.currentView.close();
    }
  });

  return Router;
});

在初始化块中,我尝试将this绑定到test。当我调用test函数时,我的this仍然是Backbone,而不是当前的类。我做错了什么以及如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

附加处理程序后绑定它。

initialize: function() {
    // `test` is bound with the wrong THIS
    Backbone.on('location', this.test);
    debugger;
    // Here you actually do the binding
    _.bindAll(this, 'test');
 },

只需交换订单,看看是否可以解决您的问题。

答案 1 :(得分:1)

我认为在调用Backbone.on

时需要第三个参数
  

要在调用回调时为此提供上下文值,请传递可选的第三个参数:model.on('change', this.render, this)

喜欢这个Backbone.on('location', this.test, this);