当我试图用breeze和requirejs编译我的项目时,我遇到了多个问题。展开这个,我尝试用Knockout RequireJS example重新开始。 在我安装MVS2013Pro之后,我能够运行该项目,但并非没有问题:
window.breeze已定义,因此已泄露到全局范围(此 不应该发生在RequireJS上)
点击F5刷新会因
而崩溃有了这些错误,我甚至都没有尝试建立我的grunt requirejs(r优化器)任务。因为这些是我问题的根源。
注意:我不是在寻找淘汰赛解决方案,我的筹码实际上是:MongoDataService + Breeze + SaveQueueing + RequireJS + AngularJS + Socket.IO + Cordova
答案 0 :(得分:0)
你是对的,breeze
在 breeze.debug.js 的底部隐藏回浏览器:
if (global.window) {
global.window.breeze = breeze;
}
我们不知道为什么要把它放在代码库中。没有人记得。最后,就像它一样,Breeze本身并不需要它。
我在初步测试中对此进行了评论,这似乎可以解决问题。 Todo-KO-Require 示例中的 window.breeze 变为undefined
;它在未使用 require.js 的样本中保持定义(正确)。
我们不认为这对任何人来说都是一个突破性的变化......并且补救措施很简单:在应用程序的顶部自己定义。
我们可能会为下一个版本删除这些行,除非我们发现了其他原因。
我根本无法重复这一点。我怀疑你正在努力编写一个使用 breeze.savequeuing.js 的Angular应用程序,将你的发现与无意中在全局命名空间中的breeze混为一谈。
为什么我这么想?因为在尝试在v.1.0的注释(第14行)中使用明确禁止的Angular应用程序中使用 breeze.savequeuing.js 时,会出现您所描述的错误。 4:
取决于Breeze(它补丁)和Q.js(不适用于Angular ......)
毫无疑问,您从所需的库中省略了 Q.js ,这一切都从那里转到了蛋羹。
我个人对" 保存用户更改任何内容"使用存储排队成为必要的用户体验。我写的很难过。但它就是。
显然依赖于 Q.js 是因为它不适用于Angular应用程序。现在很容易让它成为Angular-ready,因为我们最近(安静地)使Breeze用于承诺的组件可以访问
breeze.Q // returns the promises component currently used by Breeze
因此,您可以将第104行的Q引用更改为
var deferredSave = breeze.Q.defer();
这在使用breeze v.1.4.14 及更高版本时应该有效。我还没有完全测试过它。
这种变化(或类似的东西)可能会进入 breeze.savequeuing.js v.1.1.0 (因为我刚刚推出了非发行版)版本的。)