2013-03-16 154 views
0

當我使這個觀點查看與.fetch()不渲染

var MyView = Backbone.View.extend({ 
/* el : '.myview', used when rendered on router request */ 
    render : function() { 
     var data = new Data(); /* a collection from ajax request */ 
     var that = this; 

     data.fetch({ 
      success : function (bla, data) { 
       var template = _.template($('#temp').html(), {data: data.players}); 
       that.$el.html(template); 
      } 
     }); 
    } 
}); 

對路由器的要求,它的工作原理:

var Router = Backbone.Router.extend({ 
    routes : { 
     'bla' : 'bla' 
    } 
}); 

var myView = new MyView(); 

var router = new Router(); 
router.on('route:bla', function() { 
    myView.render(); 
}); 

但是,當我想它只是與頁面加載,它沒有:

var myView = new MyView({ el: $(".myview") }); 
+0

它會給你什麼錯誤嗎?你可以嘗試在'var myView = new MyView({el:$(「。myview」)})中將'el'指定爲'「.myview」'而不是'$(「。myview」)''。 '? – Cyclone 2013-03-16 15:57:19

+0

@Cyclone沒有錯誤,並刪除$()沒有區別 – ilyo 2013-03-16 16:01:22

+1

視圖初始化是在DOM準備好之後完成的嗎? – Cyclone 2013-03-16 16:03:17

回答

0

因爲在發佈的最後一行中,您缺少調用渲染函數。

var myView = new MyView({ el: $(".myview") }); 
myView.render(); 

除此之外,我看到初始化工作流有點wiered。即請求.render()中的數據功能,即違反查看單一責任。一些東西,我在我的應用程序中做的。

var Router = Backbone.Router.extend({ 
    routes : { 
     'bla' : 'bla' 
    }, 

    bla: function() { 
     app.BlaApp(); 
    } 
}); 

app.BlaApp = function() { 
    var collection = new Collection(); 
    collection.fetch({ 
     success: function (collection) { 
      var view = new app.BlaView({model: collection}); 
      view.render(); 
     } 
    }) 
} 

app.BlaView = Backbone.View.extend({ 
    render: function() { 
     var template = // render template based on this.model; 
     this.$el.html(template); 

     return this; 
    } 
});