2016-06-07 107 views
0

在当前的项目中,我需要使用RequireJS以及动态包含模块与静态包含的JavaScripts一样。Requirejs静态包含脚本回调没有得到执行

每个页面都需要包含静态脚本,并在开发过程结束时进行concardinated。这些例如jQuery jQueryUi和一些更多的脚本,如自动建议脚本。

动态部分仅用于某些页面,如配置程序,其中需要一个额外的脚本,以便在每个页面上加载大量脚本。这就是为什么此脚本作为模块加载到需要的页面上的原因。

虽然jQuery和jQueryUI的玩好的,可作为AMD模块由于该如何工厂方法被执行:

(function(t){ 
    "function"==typeof define&&define.amd?define('jquery-ui',["jquery"],t):t(jQuery) 
})(function(t){...}); 

这不是自动提示部分属实。虽然我添加了完全相同的功能模式:

(function(t){ 
    "function"==typeof define&&define.amd?define('suggest',['jquery','jquery-ui'],t):t(jQuery) 
})(function(t){ 
    console.log('yeah'); 
}); 

工厂内部的yeah部分没有得到执行。

我在想什么?还有什么需要让它工作?

回答

0

从RequireJS文档(http://requirejs.org/docs/api.html):由 调用定义定义

理想情况下,加载脚本将模块()。但是,您可能需要使用某些传统/传统 “浏览器全局”脚本,这些脚本不通过 definition()表示它们的依赖关系。对于那些,你可以使用shim配置。正确表达 其依赖关系。

您可以尝试使用类似:

requirejs.config({ 
    ... 
    shim: { 
     'suggest': { 
      deps: ['jquery', 'jquery-ui'], 
      exports: 'suggest' 
     } 
    } 
    ... 
} 

您可能需要添加suggetpaths财产了。

+0

我应该强调的是autosuggest文件也有一个完全定义的块依赖。 所以它不是一个普通的js文件,而是一个amd兼容的结构化文件,它通过脚本标签被包含。 如果我没有完全错误,只需要简单的js文件就可以使用垫片。在这种情况下,我想我不需要将此添加到配置。 –

+0

你可以显示'autosuggest'文件吗?如果我能看看模块定义,我可能会更好地帮助你。 –

+0

用建议文件创建一个要点。如果您需要更多详细信息,请告诉我。 https://gist.github.com/garbast/9af7782e71507fda37d6bb637de5ca9c –