让我疯狂,看看这个jsfiddle - 这是我的问题的非常简化的版本,但它绝对是示范性的。像这样工作,但如果你删除AppView定义
var AppView = Backbone.View.extend({
el: $("body"),
initialize: function() {
console.log('init');
this.render();
},
render: function() {
console.log('render');
this.$el.html("123");
}
});
来自“主”脚本(检查自己 - 相同的定义仍将包含在“外部资源”部分) - 它停止工作。我试图用console.log
检查该定义是否仍然可以在全局命名空间中使用,当然也是。不知道。
更新
还有更多 - 它不只是可用 - 该死的事情正如我们可以通过console.log()
在chrome dev控制台中工作,但this.$el.html("123");
不会影响任何事情!
答案 0 :(得分:1)
如果您检查小提琴中的右下方面板,则可以看到AppView.js
文件包含在iframe中显示的生成文档的head
中。
视图的定义是el
元素设置为$('body')
el:$(“body”)
但是body
Node
不存在,但是:它是一个空的jQuery对象。
在jQuery
document
ready
回调中,AppView定义会按预期找到body元素。
我理解您需要在单独的javascript文件中移动View的定义。
您可以通过多种方式实现结果。最明显的是包含在body元素中导入它的script
元素。更好的方法是在el
定义的initialize
方法中设置AppView
,或者更好的是,您可以将元素传递给构造函数,正如Kenan在下面的评论中解释的那样