【问题标题】:Knockout Mapping Plugin with RequireJS : Uncaught Error: Mismatched anonymous define() module带有 RequireJS 的淘汰赛映射插件:未捕获的错误:不匹配的匿名 define() 模块
【发布时间】:2012-04-05 07:09:18
【问题描述】:

我在将 knockout.mapping 插件与 RequireJS 结合使用时遇到了这个问题。基本上,托管我的应用程序的网站正在按此顺序加载 knockout、knockout.mapping 和 requirejs。

<script src="http://127.0.0.1/scripts/require.js" type="text/javascript"></script>
<script src="http://127.0.0.1/scripts/knockout.js" type="text/javascript"></script>
<script src="http://127.0.0.1/scripts/knockout.mapping.js" type="text/javascript"></script>

甚至没有做任何进一步的事情,我得到了这个不匹配错误。是否有某种我没有意识到的顺序?

/// 更新 ///

我写了这两个测试:

基本上,您看到的是,如果我在映射插件之前自行将 require.js 加载到我的项目中,那么映射插件将变得不可见。我认为这与映射插件如何使用 require 来要求淘汰有关......但我无法确定它失败的原因。

/// 第二次更新 ///

这里的场景似乎很重要,所以我将提供更多背景信息。

想象一个在脚本标签中定义了 knockout.js 和 knockout.mapping.js 的 Web 应用程序。然后第三方小部件加载到页面中,该页面使用 requireJS 来建立它的依赖关系。正是这种加载似乎导致了问题。由于某些库是通过老式的手动方式加载的,而其他库是使用 require 加载的,因此 require 似乎与现有库的上下文相混淆。

如果我从主机应用程序中删除对 require 的引用,那么当我回来查看 ko.mapping 是否存在时会收到错误消息。这显然是因为小部件在敲除时做了一个要求,这以某种方式破坏了它与映射插件的关系。

我想我需要一个非常熟悉 RequireJS 的人来评论堆叠这些库。显然,当我为匿名消费创建小部件时,我不知道消费者如何或是否使用 requireJS。

/// 第三次更新 /// 尝试尽可能地澄清问题,也许这会更有意义:

是否有任何明确定义的模式可以将使用 RequireJS 的小部件注入到现有网页中,手动加载资源?这似乎是不可能的,因为 RequireJS 只会双重加载传统页面可能已经加载的任何内容。

【问题讨论】:

    标签: javascript requirejs knockout-mapping-plugin knockout.js


    【解决方案1】:

    答案是使用模块加载器加载所有 JavaScript,不要回头。我认真地认为这是唯一的解决方案。在大多数客户网站还没有达到这一点的世界中开发一个使用模块加载器的小部件会导致您使用一些老派的心态。

    现在,如果我能得到 +50 分,我对这个问题很生气 :)

    【讨论】:

    • 在您的问题中,您询问了如何在不知道会发生什么的情况下将 requireJS 项目添加到另一个第三方位置。您的回答没有提供解决方案。我建议取消选中它已解决,直到有人可以提供更具体的内容。
    猜你喜欢
    • 1970-01-01
    • 2013-08-05
    • 1970-01-01
    • 2013-05-29
    • 2015-07-16
    • 1970-01-01
    • 2013-02-28
    • 2013-07-16
    • 2015-03-24
    相关资源
    最近更新 更多