BreezeJS和RequireJS没有按预期工作

Gav*_*Gav 7 javascript amd requirejs knockout.js breeze

我正在将breezeJS集成到已经使用knockoutJS的现有requireJS项目中.我遇到了几个问题.

第一个是breeze无法加载Q库,除非我将它作为<script>标记包含在我的html包装器上,而不是作为加载的AMD依赖项.在我的项目中,我试图将我的代码保持为单个脚本标记,所以这不是理想的.

第二个问题是breezeJS无法加载淘汰赛.在我的main.js中,我已经为淘汰定义了一条路径:

knockout: '../libs/knockout/knockout-2.2.0',

(我这样做是因为我喜欢肯定我没有访问全局ko)

然而,当我为我的项目添加微风时,微风无法加载我的淘汰库.查看微风代码,我可以看到它已被硬编码加载淘汰库ko.

不想改变我的所有代码我发现我可以将我的AMD加载的淘汰库添加到全局窗口对象中window['ko'].但这感觉就像一个小屋.还奇怪地以这种方式添加Q并删除<script>标签不起作用,因为我认为Q在应用程序的生命周期中需要太早,甚至在我污染全局之前 - 我确实require()在main.js中嵌套我的调用但是隐藏了我的大部分应用程序文件来自构建过程,所以我放弃了这种方法.

我如何在我的项目中包含Q和knockout和breeze,并且仍然使用单行<script>标记,目前我不得不将Q作为单独的<script>标记包含并且污染全局以获得微风和淘汰赛以便很好地发挥作用.

我在我的项目中使用了很多其他库,但没有一个难以集成.

任何帮助深表感谢

干杯

GAV

编辑:这是我的完整需求配置:

require.config({
    /**
    * shims are for 3rd party libraries that have not been written in AMD format.
    * shims define AMD modules definitions that get created at runtime.
    */
    shim: {
        'jqueryUI': { deps: ['jquery'] },
        'jqueryAnimateEnhanced': { deps: ['jqueryUI'] },
        'jqueryScrollTo': { deps: ['jquery'] },
        'touchPunch': { deps: ['jquery'] },
        //'Q': { exports: 'Q' },
        //'breeze': { deps: ['Q', 'knockout'], exports: 'breeze' },
        'path': { exports: 'Path' },
        //'signalR': { deps: ['jquery'] },
    },

    paths: {
        //jquery
        jquery: '../libs/jquery/jquery-1.7.2.min',
        'jquery.adapter': '../libs/jquery/jquery.adapter',

        //jquery plugins
        horizontalNav: '../libs/jquery/plugins/horizontalNav/jquery.horizontalNav',
        jqueryUI: '../libs/jquery/plugins/jquery-ui/jquery-ui-1.9.2.custom',
        jqueryAnimateEnhanced: '../libs/jquery/plugins/animate-enhanced/jquery.animate-enhanced',
        touchPunch: '../libs/jquery/plugins/touch-punch/jquery.ui.touch-punch.min',
        //jqueryScrollTo: '../libs/jquery/plugins/jquery-scrollTo/jquery.scrollTo.min',
        //reveal: '../libs/jquery/plugins/reveal/jquery.reveal',
        //opentip: '../libs/jquery/plugins/opentip/opentip-jquery',

        //RequireJS
        domReady: '../libs/require/plugins/domReady',
        text: '../libs/require/plugins/text',
        async: '../libs/require/plugins/async',
        depend: '../libs/require/plugins/depend',
        json: '../libs/require/plugins/json',
        noext: '../libs/require/plugins/noext',

        //coffee-script
        'coffee-script': '../libs/coffee/coffee-script',
        cs: '../libs/require/plugins/cs',

        //Path
        path: '../libs/path/path.min',

        //Knockout
        knockout: '../libs/knockout/knockout-2.2.0',
        knockoutTemplateSource: '../libs/knockout/ko.templateSource',
        knockoutValidation: '../libs/knockout/ko.validation',

        //breeze
        Q: '../libs/breeze/q',
        breeze: '../libs/breeze/breeze.debug',

        //Signals (Observer pattern)
        signals: '../libs/signals/signals',

        //SignalR - Push notifications
        signalR: '../libs/signalR/jquery.signalR-0.5.2.min',

        //utils
        logger: 'common/logging/logger',
        tinycolor: '../libs/tinycolor/tinycolor',
        composing: 'common/composition/composing',

        //app specific
        BaseWidgetViewModel: 'app/view/core/BaseWidgetViewModel',

    }
});
Run Code Online (Sandbox Code Playgroud)

Sas*_*ann 0

听起来你的要求配置不正确。你能发布你的需要配置的代码吗?我好奇:

keep my code down to a single script tag
Run Code Online (Sandbox Code Playgroud)

为什么?

编辑:现在我明白了。听起来仍然需要配置是错误的。