![](/img/trans.png)
[英]Backbone.js: calling render() from view's Initialize: function
[英]Backbone.js calling function render from event handler
我有這樣的看法:
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'
我認為是因為在事件處理程序中這成為了我的形式。
您已經了解了上下文約束,這就是為什么使用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()
函數。
將有2個選項。
1.使用骨干視圖的事件委托。 它將允許您在事件處理程序中使用視圖對象。
2.將您的addUser函數綁定到此。
addUser: function() {
...
//do something
...
}.bind(this)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.