Backbone.js 使用.fetch()的视图未呈现
当我渲染这个视图时Backbone.js 使用.fetch()的视图未呈现,backbone.js,view,render,Backbone.js,View,Render,当我渲染这个视图时 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({
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") });
因为在您发布的最后一行中,缺少对呈现函数的调用
var myView = new MyView({ el: $(".myview") });
myView.render();
除此之外,我看到初始化的工作流程有点复杂。也就是说,请求.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;
}
});
这会给你任何错误吗?您可以尝试将
el
指定为“.myview”
而不是$(.myview”)
行中的var myview=new myview({el:$(.myview”)})代码>?@Cyclone没有错误,删除$()没有区别DOM准备就绪后是否进行视图初始化?@Cyclone是,为什么?它被包装在$(function(){
中。我这样问的原因是,当初始化和呈现视图的代码段被执行时,视图
将尝试创建指定的el
对象的jquery cached
对象,如果指定的元素不在DOM中,那么它将无法呈现任何内容。