使用requirejs时,Breeze需要淘汰赛

时间:2013-05-01 22:13:25

标签: knockout.js requirejs breeze

我在使用requirejs的应用程序中加载breezejs时遇到了一些奇怪的行为。

主要问题是,如果我设置需要加载breeze(加上它的依赖项q和jquery),除非将knockout设置为breeze的依赖项,否则breeze无法加载。

  

未捕获错误:尚未为上下文加载模块名称“ko”:   _。使用require([])

如果我真的想要使用淘汰赛,那很好,但我正在使用角度。我想它也不会破坏加载淘汰的任何东西,但如果它永远不会被使用,那么下载是浪费时间。

所以,我的第一个问题是为什么微风需要淘汰只是因为我使用requirejs?对我来说似乎是一个错误。

另一个奇怪的行为WRT微风和要求是如果我加载需要然后微风而不使用require,那么breeze无法加载。

  

未捕获错误:匿名的define()模块不匹配...

似乎breeze假设如果加载了require,那个微风将被require加载。但是,这似乎是一个假设的飞跃。自从我第一次发现上一期以来,我遇到了这个问题。我以为我只是自己装风,而不是要求它。当然,仍然需要加载,因为应用程序的其他部分依赖于require。

所以,我的第二个问题是为什么在需要之前必须加载微风?看起来很奇怪,因为这两个库并不相互依赖。为什么需要加载订单?

1 个答案:

答案 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.,并宣布修复。