【问题标题】:Breeze requires knockout when use requirejsBreeze 使用 requirejs 时需要敲除
【发布时间】:2013-04-25 23:51:18
【问题描述】:

我在一个也使用 requirejs 的应用程序中加载了一些奇怪的行为。

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

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

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

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

WRT 和 require 的另一个奇怪行为是,如果我加载 require,然后在没有使用 require 的情况下加载轻柔,那么微风加载失败。

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

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

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

【问题讨论】:

    标签: knockout.js requirejs breeze


    【解决方案1】:

    来自微风网站:

    Breeze 依赖于一个第三方 JavaScript 库 Q.js,它是 包含在 NuGet 和下载包中。 Q.js 很流行 Common.js 承诺管理标准的实现 异步 JavaScript。

    这意味着如果你加载了 Q.js,它可能会与 requirejs 冲突,因为它只是 AMD 加载器的不同实现。

    还有:

    除非另有说明,其他示例也需要这些库和 他们在 Q 和 Breeze 之前加载 jQuery 和 Knockout 脚本 脚本。确保你要么跟随他们的领导......或者知道你为什么 做不同的事情。

    您应该能够配置为在没有淘汰赛的情况下逃脱。以下是他们的源代码:

    可能的选项是“ko”、“backingStore”或“backbone”。请参阅微风.config.initializeAdapterInstances 方法。

    http://www.breezejs.com/sites/all/apidocs/classes/config.html

    希望这会有所帮助。

    更新:查看breeze source 我看看是否存在需要加载程序,他们会尝试将淘汰赛加载为“ko”。您应该能够通过定义自己的不返回任何内容或返回 false 的“ko”模块来配置 requireJS 加载程序来解决此问题。然后微风将回退到“backingStore”,它不应该抱怨它。

    按区更新(2013 年 5 月 20 日):我们将在 v.1.3.3 之后的版本中修复此问题。请参考this more recent S.O.,我们会在此提供临时建议并将公布修复方案。

    【讨论】:

    • Q 提供了 Promise 功能——不是 AMD。我认为 Q 和 require 在功能上没有任何重叠。
    • 我已经使用“breeze.config.initializeAdapterInstance("modelLibrary", "backingStore", true)" 研究过(并尝试过)。如果 KO 加载,Breeze 实际上是为使用 backingStore 而编写的——这正是我想要的。问题是,如果我使用 require 加载微风,除非我加载 KO,否则微风无法加载。如果我设置需要加载 KO,并设置微风以使用 backingStore,那么微风会按需要工作(使用角度)。奇怪的是我已经加载了 KO 并且永远不会使用它!
    • 查看微风源我看到:github.com/IdeaBlade/Breeze/blob/master/Breeze.Client/Scripts/… 如果需要加载程序存在,他们将尝试将淘汰赛加载为“ko”。您应该能够通过定义自己的不返回任何内容或返回 false 的“ko”模块来配置 requireJS 加载程序来解决此问题。然后微风将回退到“backingStore”,它不应该抱怨它。
    • 我确实有这个想法,但希望少一点。在你建议之后,我确实尝试了它并且它有效。我在 requirejs.config 调用之前添加了'define("ko")',然后设置微风以依赖'ko'。谢谢。
    • 确实值得称赞。我希望读者注意,正确答案的文字不是很相关。您的第一条评论是。
    猜你喜欢
    • 2013-04-01
    • 1970-01-01
    • 2014-12-28
    • 2016-03-24
    • 2016-10-08
    • 2014-01-01
    • 1970-01-01
    • 2017-02-02
    • 2016-04-26
    相关资源
    最近更新 更多