我在使用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会重复加载传统页面可能已经加载过的任何内容。