簡體   English   中英

Backbone.js從事件處理程序調用函數渲染

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM