如何在提交处理程序回调中访问主干视图

How to access backbone view in submitHandler callback?

本文关键字:访问 视图 回调 程序 提交 处理      更新时间:2023-09-26

我正在探索骨干网.js我正在尝试设置简单的登录页面。这是我的观点.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;
    }
});

如您所见,我在render函数中使用附加到表单的jquery.validation。作为提交处理程序回调,我已经设置了login函数。此行

this.model.set({...

给了我this.model is undefined错误,所以我假设登录功能中的thisinitializerender函数中的this不同。我的问题如何在登录功能中访问骨干this

一种方法是使用 jQuery.proxy() 为 login 函数设置 "this" 的值:

$(this.el).find("form").validate({
  submitHandler: $.proxy(this.login, this)
});

代理返回一个新函数,其中包含"this"的新值。由于渲染函数中的"this"指向您的视图,因此将其作为第二个参数传递给代理。