【发布时间】: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