我正在探索backbone.js,我正在尝试设置简单的登录页面。这是我的view.js文件:
window.LoginView = Backbone.View.extend({
events: {
},
initialize : function() {
this.model.bind("error", this.error);
this.template = _.template(tpl.get('login'));
},
login: function(form){
this.model.set({
login: $("#login", form).val(),
password: $("#password", form).val()
});
},
render : function(eventName) {
$(this.el).html(this.template());
$(this.el).find("form").validate({
submitHandler: this.login
});
return this;
}
});
正如您所看到的,我在jquery.validation
函数中使用了render
形式。作为submitHandler回调,我设置了login
函数。这一行
this.model.set({...
给出了this.model is undefined
错误,因此我假设登录功能中的this
与this
或initialize
函数中的render
不同。我的问题是如何在登录功能中访问主干this
?
答案 0 :(得分:2)
一种方法是使用jQuery.proxy()为登录函数设置“this”的值:
$(this.el).find("form").validate({
submitHandler: $.proxy(this.login, this)
});
代理返回一个带有“this”新值的新函数。由于渲染函数中的“this”指向您的视图,因此将其作为第二个参数传递给代理。