文案怎么办!插件使用 baseUrl?

How does the text! plugin use the baseUrl?

我在获取文本时遇到问题!在我的 requirejs 网站上工作的插件。它总是在请求 url 中包含 lib/,但是所有其他文件(不使用文本!)都已成功找到并加载。这是我的目录结构:

WebContent/
  |--backbone/
        |--Bunch of folders and files
  |--config/
        |--config.js
  |--lib/
        |--jquery.js
        |--text.js
        |--require.js
  |--index.html

我的 index.html 文件是:

<body>
    <div id="siteLayoutContainer"></div>
    <script data-main='config/config' src="lib/require.js"></script>
</body>

配置文件是:

requirejs.config({
    baseUrl: './',
    paths: {
        jquery: 'lib/jquery.js',
        backbone: 'lib/backbone.js',
        text: 'lib/text',
        application: 'backbone/application'
    },
    text: {
        env: 'xhr'
    }
});
require(['application'], function(App) {
    App.start();
});

我用的是文字!像这样的插件:

define([
    'jquery',
    'text!backbone/templates/SomeTemplate.html'
], function(jQuery, NotFoundHtml) {
    //Some code here
}

因此,在上面的脚本中,用于模板的 url 是: http://localhost/lib/backbone/templates/SomeTemplate.html

我希望它是: http://localhost/backbone/templates/SomeTemplate.html

我试过以下方法:

所以我卡住了,不知道我错过了什么。我显然不理解文本!插件使用 baseUrl 或它如何确定 url 它将用于获取定义的文件。

编辑问题后,它现在包含诊断问题的所有信息。正如您在其中一条评论中所猜测的那样,问题确实在于这条路径:

backbone: 'lib/backbone.js',

正在放弃您提供给 text 插件的模板的分辨率。当文本插件加载您提供给它的内容时,它会采用 ! 符号后的路径并将其视为模块名称,并通过模块解析过程。模块解析的工作方式是检查是否有一个前缀与 paths 中的任何键匹配,并将用与该键关联的值更改前缀,从而给出您获得的结果。解决此问题的一种方法是将其添加到您的 paths 配置中:

"backbone/templates": "backbone/templates"

这将使您在 backbone/templates 下请求的任何内容都不会被 backbone 路径搞乱。

注意:最好避免在模块名称中添加扩展名,因此您应该将其从 jQuery 和 Backbone.

的值中删除