javascript - Backbone.js 从事件处理程序调用函数渲染

标签 javascript backbone.js

我的观点是这样的:

render:function(){
    this.template = _.template(tpl.get('tplUsersManagement'));
    this.$el.html(this.template({models : this.model.models}));
    this.$el.i18n();
     $('#formAddUser')
     .on('invalid', function () {
            var invalid_fields = $(this).find('[data-invalid]');
        console.log(invalid_fields);
        })
     .on('valid', this.addUser);
        return this;
        },
addUser: function(event){
    event.preventDefault();
    var newUser = new UserModel({
        . . .
    });
    var that=this;
    newUser.save({},{
            headers:{"X-Token":"theToken"},
            statusCode:{
                202: function(){
                    that.render();//here I want to call render function
                    }
                }});
            }

        }

所以我想从我的 addUser 函数调用我的渲染函数。我尝试用 this=that 然后 that.render 来做到这一点,但我收到一个错误,它说:

Uncaught TypeError: Object # has no method 'render'

我认为这是因为在事件处理程序中这成为了我的表单。

最佳答案

您已经意识到上下文约束,这就是您使用 var that = this 技巧的原因,但您还需要在另一个地方实现它:

var self = this; // I prefer "self" rather than "that" 
$('#formAddUser').on('invalid', function () {
  // handle invalid data
}).on('valid', function( ev ){
   ev.preventDefault();
   self.addUser();
   return this;
});

addUser 函数是 View 模块的一部分,但在 valid/invalid 事件处理程序中,上下文(this 变量)被改变了。在进入事件处理程序的范围之前,您需要保留正确上下文的引用 (var self = this;),以便可以使用它来调用 addUser() 函数。

关于javascript - Backbone.js 从事件处理程序调用函数渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22191610/

相关文章:

javascript - 如何让js中创建的div在点击动态创建的td后填满屏幕?

javascript - 如何在 Backbone.js 路由中匹配它?

javascript - 为主干模型中的嵌套属性分配值,但不使用 .set 方法

javascript - 添加未找到结果的自定义消息

javascript - JavaScript 中的 Struts 标签

javascript - 单击页面上的电子邮件链接的软件?

javascript - 没有使用 jasmine.js 和 sinon.js 调用backbone.js 点击事件 spy

javascript - 向 HTML 表格添加过滤

node.js - 使用Backbone.js框架如何进行ajax调用快速路由

javascript - 主干 - this.$el vs $(this.el)?