我在收到短信时遇到了问题!插件在我的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。
答案 0 :(得分:3)
编辑完问题后,它现在包含诊断问题的所有信息。正如您在其中一条评论中所猜测的那样,问题确实是这条道路:
backbone: 'lib/backbone.js',
正在抛弃您为text
插件提供的模板的分辨率。当文本插件加载您提供给它的内容时,它会采用!
符号后的路径并将其视为模块名称,并通过模块解析过程。模块解析的工作方式是检查是否存在与paths
中的任何键匹配的前缀,并将使用与键关联的值更改前缀,从而得到您获得的结果。解决此问题的一种方法是将其添加到paths
配置中:
"backbone/templates": "backbone/templates"
这将使您在backbone/templates
下请求的任何内容都不会被backbone
路径弄乱。
注意:最好避免在模块名称中放置扩展名,以便将其从jQuery和Backbone的值中删除。