https://gist.github.com/stephenvisser/2711454
我用这个要点进行导航。
我的观点如下。此视图用于模板内的dom(#blog-list-container)。模板加载了吉斯导航。
app.BlogListView = Backbone.View.extend({
el: '#blog-list-container',
renderBlog: function(item) {
var blogView = new app.BlogShortView({
model: item
});
this.$el.append(blogView.render().el);
},
render: function() {
this.collection.each(function(item) {
this.renderBlog(item);
}, this);
}, ....
我按如下方式创建此视图和导航:
new Navbar({el:$('#nav-item-container')});
new Content({el:$('#container')});
new app.BlogListView();
所以问题是,在BlogListView中未定义this.el。在我看来;它没有拿起dom el:#blog-list-container,因为它在模板内并在BlogListView初始化后加载。我怎么能克服这个?
这是我的第一个骨干实验,我希望这是有道理的。
修改
如果我使用jquery选择器
,它可以正常工作 $('#blog-list-container').append(blogView.render().el);
但我仍然想知道设置el属性的正确方法是什么。
答案 0 :(得分:0)
由于@mu建议太短,不要使用Backbone.js,这不是最好的做法。是的,您遇到的事实是它在完全呈现给DOM之前尝试附加元素。
我从来没有使用过第一个选项,也从未遇到过这类问题,所以我提出反对意见。
我相信你遗漏了一个#:
$('#blog-list-container').append(blogView.render().el);
答案 1 :(得分:0)
Juts add
return this;
在“渲染”功能结束时。
你的调用this.$el.append(blogView.render().el);
期望返回元素“el”并且你没有返回任何内容,(在调用结束时注意.el()
部分),因此jQuery抛出“未定义”错误,因为没有任何内容返回。