2013-03-16 90 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; 
    } 
});