window.onload 不会等到 dom 准备好

window.onload not waiting until dom ready

尽管在 app.js 函数中包装了 app.js 中的代码,但我一直收到错误消息

Cannot set property 'innerHTML' of undefined

由在索引路由上创建 HomeView 触发。 HomeView的render函数尝试将模板设置为render函数中el的innerHtml

this.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());
    }

主视图

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();

使用

$(document).ready

而不是

window.onload

问题不在于 onload。您只是在 属性 存在之前访问它。

您永远不会在 HomeView 构造函数中设置 this.el

$("body").html(this.el);
this.template = _.template($('#main-template').html());
this.render();

您正在调用 this.render(),访问 this.el.innerHTML,但是您在这三行中的哪个位置设置 this.el?无处。

如果 this.el 应该由 View 设置,那么您必须在访问 this 之前 调用父构造函数:

constructor() {
    super();
    $("body").html(this.el);
    this.template = _.template($('#main-template').html());

    this.render();
}