我正在尝试将方法绑定到我的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
,而不是当前的类。我做错了什么以及如何解决这个问题?
答案 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);