Webpack的主干/Marionette根布局错误



我有一个Backbone/Marionette应用程序,我一直在用RequireJS开发,我正在将其转换为Webpack。Webpack很好地打包了我的代码,但当我试图加载打包的JS时,它遇到了一个错误,即布局的DOM无法找到核心区域之一。错误消息为"DOM中必须存在一个"el"#内容"。

我的源代码的一个废弃版本如下:

HTML:

<!DOCTYPE HTML>
<html lang="en">
    <head>
        <script type="text/javascript" src="/public/app/bundle.js"></script>
    </head>
    <body>
        <div id="content" class="content"></div>
    </body>
</html>

JS:

var RootLayout = Marionette.View.extend({
    el: 'body',
    regions: {
        content: '#content'
    }
});
new RootLayout().getRegion('content').show(someView);

我目前正在使用Marionette v3.0.0-pre.3,但在切换到Webpack之前,它没有任何问题——它可能相关,也可能不相关。关于我如何解决这个问题的想法?

感谢

事实证明,我对init.js文件所做的一个更改以某种方式导致了这个问题。我使用嵌套的requires以正确的顺序加载amd依赖项,并切换了它的工作方式来更改块输出。恢复该更改解决了问题。

编辑:我已经在转换我的应用程序的道路上走得更远了——因为它运行在Node服务器上,我决定将我的所有RequireJS模块定义转换为CommonJS,这个问题再次引起了人们的注意。在用头撞墙几个小时后,我意识到问题是我的视图在实际加载它所在的HTML元素之前就被附加到了DOM上。一个简单的$(document).ready包装我的init代码才是真正的解决方案(实际上我只是把我的webpack捆绑包的脚本标记移到了HTML的底部)。

tl;dr-RequireJS使您在开始处理DOM之前不需要确保DOM已经准备好,而CommonJS则不需要。异步与同步。

最新更新