backbone 的collection.fetch() 的異步問題

這段代碼的:「this.remarks.add(self.model);」在任何函數中始終報出this.remarks是空的。

app.RemarkEditView = Backbone.View.extend({
    el: '.m-remark' ,
    tagName: 'div',
    className: 'remark',
    template: _.template( $('#remarkEditor').html() ),
    events: {
        'click .save': 'saveRemark',
        'click .del': 'changeEditor'
    },
    initialize: function() {
        var self = this;
        this.remarks = new app.RemarkCollection();
        this.model = new app.Remark({student_id:239, content:'尚未創建評語'});
        this.remarks.fetch();
        this.remarks.add(self.model);
    this.render();  
       this.listenTo(this.remarks, 'add', this.sss );
    },
..................

改爲下面這段就行了

app.RemarkEditView = Backbone.View.extend({
    el: '.m-remark' ,
    tagName: 'div',
    className: 'remark',
    template: _.template( $('#remarkEditor').html() ),
    events: {
        'click .save': 'saveRemark',
        'click .del': 'changeEditor'
    },
    initialize: function() {
        var self = this;
        this.remarks = new app.RemarkCollection();
        this.model = new app.Remark({student_id:239, content:'尚未創建評語'});
        this.remarks.fetch({rest:true})
            .done(function(){
                if( self.remarks.length > 0 ){
                    self.model = self.remarks.first();
                }else{
                    self.remarks.add(self.model);
                }
                self.render();
            })
            .fail(function(){
                self.remarks.add(self.model);
                self.render();
            });

        this.listenTo(this.remarks, 'add', this.sss );


    },


.................
相關文章
相關標籤/搜索