使用RequireJS的Knockout Mapping插件:未匹配的匿名define()模块错误

3

我在使用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有关...但我无法确定它失败的原因。
///第二次更新///
看起来情景很重要,所以我将提供更多背景信息。
想象一下一个Web应用程序,它在脚本标记中定义了knockout.js和knockout.mapping.js。然后,第三方小部件加载到页面中,该小部件使用requireJS来建立其依赖关系。这似乎是引起问题的原因。由于某些库是通过旧式的手动方式加载的,而其他库是使用require加载的,因此require似乎会干扰现有库的上下文。
如果我从主机应用程序中删除对require的引用,则当我回到查看ko.mapping是否存在时,我会收到错误。这显然是因为小部件对knockout进行了要求,从而破坏了它与映射插件的关系。
我认为我需要一个非常熟悉RequireJS的人来评论这些库的堆叠。显然,当我创建一个匿名消费者的小部件时,我不知道消费者如何或是否使用requireJS。

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

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

1个回答

3
答案是使用模块加载器来加载所有JavaScript,并且不要回头。我认为这是唯一的解决方案。在大多数客户站点尚未到达该点的世界中开发使用模块加载器的小部件会导致您使用一些老派的思维方式。
现在,如果我能够拿回我在这个问题上浪费的50分就好了 :)

1
在你的问题中,你问如何将一个 requireJS 项目添加到另一个第三方位置而不知道会发生什么。你的回答没有提供解决方案。我建议取消标记为已解决,直到有人能够提供更具体的东西。 - Jesse Burcsik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接