尽管在window.onload函数中将代码包装在app.js中,但我仍然收到错误
Cannot set property 'innerHTML' of undefined
通过在索引路径上创建HomeView来触发。 HomeView的渲染功能尝试将模板设置为渲染函数
中el的innerHtmlthis.el.innerHTML = this.template();
当我使用一些ES6时,此代码也会使用babeljs进行传输并放入一个文件(bundle.js)。
在尝试window.onload函数之前,我使用ES6样式dom准备将代码包装在app.js中
$(() => {
});
我怎样才能真正确保dom准备就绪,或者我应该如何将HomeView的el设置为特定的dom节点?
app.js
window.onload = function() {
window.myRouter = new MyRouter();
$(window).on("hashchange", myRouter.hashChange);
Backbone.history.start({pushState: true})
}
main.js
export class MyRouter extends Router {
constructor(){
this.routes = {
'': 'index'
}
this._bindRoutes();
}
index(){
this.loadView(new HomeView());
}
HomeView
export class HomeView extends View {
constructor(){
$("body").html(this.el);
this.template = _.template($('#main-template').html());
this.render();
super();
}
render(){
this.el.innerHTML = this.template();
答案 0 :(得分:0)
使用
$(document).ready
而不是
window.onload
答案 1 :(得分:0)
问题不在于onload
。您只是在存在之前访问该属性。
您永远不会在this.el
构造函数中设置HomeView
:
$("body").html(this.el);
this.template = _.template($('#main-template').html());
this.render();
您正在拨打访问this.render()
的{{1}},但您在这三行中的哪个位置设置了this.el.innerHTML
?不通。
如果this.el
应由this.el
设置,那么您必须先调用父构造函数 才能访问View
:
this