0

在我的 mozart 应用程序中,每加载几个页面,我都会收到以下 JS 错误:

“TypeError:'null' 不是对象(评估 'this.el.parentNode.replaceChild')在https://cdn.bigcommerce.com/mozart/0.1.9/mozart.min.js:1https:// /cdn.bigcommerce.com/mozart/0.1.9/mozart.min.js:1https://cdn.bigcommerce.com/mozart/0.1.9/mozart.min.js:2https://cdn .bigcommerce.com/mozart/0.1.9/mozart.min.js:2https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.4.4/underscore-min.js:1 "

我在索引页面上的应用程序正文如下所示:

<body>
  <script type="text/javascript">
    App.start({ rootElement: '#RunwayContainer'});
  </script>
  <div id="RunwayContainer"></div>
</body>

在我看来,我所做的只是一个简单的

{{#collection "App.PlayListItemView" collectionObserveBinding="plays"}} 占位符 {{/collection}}

似乎我可以通过强制刷新缓存来可靠地重现这一点。

我们如何解决这个问题?这导致我的测试失败,这意味着我们无法在客户面前得到这个。

4

1 回答 1

1

如果您的 App.start 函数创建一个布局,然后在其上调用 bindRoot(rootElement),您需要:

(a) 将 App.Start 调用移到div之后

或者

(b) 将整个 App.Start 调用包装在 $(document).ready 中

如果 Layout 找不到根元素,渲染引擎将会崩溃——这会在您的代码中间歇性发生,因为脚本是否在 DOM 中可用的 div 之前运行的竞争条件(shift-refresh 将导致它一直失败)。

这是一个非常隐蔽的错误,如果 Layout 找不到根元素,下一个版本的 Mozart 会添加警告。

于 2013-09-17T05:50:47.043 回答