我在使用requirejs的应用程序中加载breezejs时遇到了一些奇怪的行为。
主要问题是,如果我设置需要加载breeze(加上它的依赖项q和jquery),除非将knockout设置为breeze的依赖项,否则breeze无法加载。
未捕获错误:尚未为上下文加载模块名称“ko”: _。使用require([])
如果我真的想要使用淘汰赛,那很好,但我正在使用角度。我想它也不会破坏加载淘汰的任何东西,但如果它永远不会被使用,那么下载是浪费时间。
所以,我的第一个问题是为什么微风需要淘汰只是因为我使用requirejs?对我来说似乎是一个错误。
另一个奇怪的行为WRT微风和要求是如果我加载需要然后微风而不使用require,那么breeze无法加载。未捕获错误:匿名的define()模块不匹配...
似乎breeze假设如果加载了require,那个微风将被require加载。但是,这似乎是一个假设的飞跃。自从我第一次发现上一期以来,我遇到了这个问题。我以为我只是自己装风,而不是要求它。当然,仍然需要加载,因为应用程序的其他部分依赖于require。
所以,我的第二个问题是为什么在需要之前必须加载微风?看起来很奇怪,因为这两个库并不相互依赖。为什么需要加载订单?
答案 0 :(得分:0)
来自breeze网站:
Breeze依赖于一个第三方JavaScript库,Q.js,即 包含在NuGet和下载包中。 Q.js很受欢迎 Common.js的实现承诺管理标准 异步JavaScript。
这意味着如果你加载Q.js它可能与requirejs冲突,因为它只是AMD加载器的不同实现。
此外:
除非另有说明,否则其他样本也需要这些库和 他们在Q和Breeze之前加载了jQuery和Knockout脚本 脚本。确保你要么跟随他们的领导......或者知道你为什么这么做 做得与众不同。
你应该能够配置为在没有淘汰赛的情况下离开。以下是源代码中的内容:
可能的选项是'ko','backingStore'或'backbone'。请参阅breeze.config.initializeAdapterInstances方法。
http://www.breezejs.com/sites/all/apidocs/classes/config.html
希望这有帮助。
更新:看breeze source我看到是否存在require loader,他们会尝试将knockout加载为'ko'。您可以通过定义自己的'ko'模块来配置requireJS加载器来解决此问题,该模块不返回任何内容或返回false。然后微风将回退到“backingStore”,它不应该抱怨它。
更新(2013年5月20日):我们将在v.1.3.3之后的版本中修复此问题。请参阅我们提供临时建议的this more recent S.O.,并宣布修复。