我的观点是这样的:
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,但我得到了一个错误,它说:
未捕获的TypeError:对象#没有方法'render'
我认为这是因为在事件处理程序中这将成为我的形式。
答案 0 :(得分:2)
您已经了解了上下文限制,这就是您使用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
函数是视图模块的一部分,但在valid/invalid
事件处理程序中,上下文(this
变量)已更改。在输入事件处理程序的范围之前,您需要保留对正确上下文(var self = this;
)的引用,以便可以使用它来调用addUser()
函数。
答案 1 :(得分:1)
将有2个选项。
1.使用骨干视图的事件委托。它将允许您在事件处理程序中使用视图对象。
2.将你的addUser函数绑定到此。
addUser: function() {
...
//do something
...
}.bind(this)