我在使用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加载到我自己的项目中,那么映射插件就变得不可见了。我认为这与映射插件如何使用需要敲除有关...但我无法确定它失败的原因。
///第二次更新///
这种情况似乎很重要,所以我将提供更多的背景信息。
想象一个在脚本标签中定义knockout.js和knockout.mapping.js的Web应用程序。然后第三方窗口小部件加载到页面中,该页面使用requireJS来建立它的依赖项。这是加载似乎导致问题。由于一些库是通过旧学校加载的,手动方式和其他人使用require加载,需要似乎混乱现有库的上下文。
如果我从主机应用程序中删除了对require的引用,那么当我回来查看是否存在ko.mapping时,我会收到错误。这显然是因为小部件在敲门时做了一个要求,它以某种方式破坏了它与映射插件的关系。
我想我需要一个非常熟悉RequireJS的人来评论堆叠这些库。显然,当我为匿名消费创建一个小部件时,我不知道消费者是如何使用requireJS的。
///第三次更新/// 试图尽可能地澄清问题,也许这会更有意义:
是否有明确定义的模式,您可以将使用RequireJS的窗口小部件注入到现有的网页中,该网页会手动加载资源?看起来这是不可能的,因为RequireJS只会加载传统页面可能已加载的任何内容。
答案 0 :(得分:3)
答案是使用模块加载器加载所有JavaScripts,不要回头看。我认真地认为这是唯一的解决方案。开发一个在大多数客户端网站尚未达到这一点的世界中使用模块加载器的小部件,这会导致您使用一些旧的学校心态。
现在,如果我能在这个问题上得到+50分,那么我会很生气:)