3

所以有类似的问题在流传,但我希望能得到一个最新的答案。

版本-

微风:1.4.0 淘汰赛:2.2.1 RequireJS:2.1.5

我正在尝试使用 knockoutJS 在 requireJS 项目中加载微风。我们的 requireJS 配置非常简单——

  require.config({
    waitSeconds: 15,
    paths: {

        'templates': "/ist-common/templates",
        'lib': '/ist-common/js/lib',
        'ist': '/ist-common/js/ist'
    }

});

所以我将微风库加载到以下目录结构中-

lib
---->q.js
---->breeze.debug.js

我正在尝试定义一个“数据服务”模块来使用微风并像这样设置它-

define(['lib/knockout', 'lib/q', 'lib/breeze.debug'], function (ko, Q, breeze) {


    var serviceName = '/ist/rest'; // route to the endpoint

    var manager = new breeze.EntityManager(serviceName);
    manager.enableSaveQueuing(true);


    var query = new EntityQuery("missions");
    manager.executeQuery(query, function(data) {

        console.log("success");

    });


});

这种配置可行吗?我试图将我的脚本标签降到最低,只加载requireJS,然后加载敲除、jquery等,因为我需要它们在我的模块定义中。

此配置当前失败并显示一条消息-

错误:无法初始化 Q。请参阅https://github.com/kriskowal/q

编辑*

我能够让它使用以下配置加载 Q,但这感觉不对。为什么要设置window.Q?我不应该能够以命名模块的形式访问 Q 吗?

 var require = {
    waitSeconds: 15,
    deps: ["/ist-common/js/lib/q.js"],
    callback: function(Q){
        window.Q = Q;
    },
    paths: {

        'templates': "/ist-common/templates",
        'lib': '/ist-common/js/lib',
        'ist': '/ist-common/js/ist'
    }

};
4

1 回答 1

1

您还需要一个 shim 来处理微风(来自Using Angular with 和 require

breeze: {
    deps: ['ko', 'jquery', 'Q']
},

这是必需的,因为尽管微风确实定义了它自己,但它没有定义它的依赖关系,它只是希望它们在那里(RequireJs 不能解释它在变量而不是字符串中的依赖关系?)。

垫片也是必需的,因为微风请求“jQuery”,但 jQuery 代码将自身定义为“jquery”

于 2013-09-07T11:50:48.470 回答