我的观点是这样的:
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/