我绝望地试图让我的 AMD 项目的Dijit template
内联功能在Dojo builds
没有运气的情况下工作......
特定的问题不是 HTML 模板本身的内联,而是在成功内联后仍然使用 Ajax (XHR) 请求它们的事实。
模板通过以下方式内联:
"url:app/widgets/Example/templates/example.html": '<div>\n\tHello World!</div>'
Dijit 小部件本身在构建后定义如下模板:
define("dojo/_base/declare,dijit/_Widget,dojo/text!./templates/example.html".split(","), function (f, g, d) {
return f("MyApp.Example", [g], {
templateString: d,
});
});
我试图建立:
- 收缩安全/关闭优化器
- 相对/绝对路径
- 使用旧
cache()
方法 - 使用
templatePath
属性
但即使在内联模板的情况下成功运行构建(0 个错误和一些警告)后,Dojo / Dijit 仍然会向这些资源发出 Ajax 请求。
这是我的构建配置文件:
var profile = {
basePath: '../src/',
action: 'release',
cssOptimize: 'comments',
mini: true,
optimize: 'closure',
layerOptimize: 'closure',
stripConsole: 'all',
selectorEngine: 'acme',
internStrings: true,
internStringsSkipList: false,
packages: [
'dojo',
'dijit',
'dojox',
'app'
],
layers: {
'dojo/dojo': {
include: [
'app/run'
],
boot: true,
customBase: true
},
},
staticHasFeatures: {
'dojo-trace-api': 0,
'dojo-log-api': 0,
'dojo-publish-privates': 0,
'dojo-sync-loader': 0,
'dojo-xhr-factory': 0,
'dojo-test-sniff': 0
}
};
由于这个问题,我的应用程序完全无法使用,因为要单独下载的文件太多(浏览器对并行连接的数量有限制)。
非常感谢您提前!
更新 :
在 my 中加载 dojo.js 和 run.js 的两行index.html
:
<script data-dojo-config='async: 1, tlmSiblingOfDojo: 0, isDebug: 1' src='/public/dojo/dojo.js'></script>
<script src='/public/app-desktop/run.js'></script>
这是新的build-profile
:
var profile = {
basePath: '../src/',
action: 'release',
cssOptimize: 'comments',
mini: true,
internStrings: true,
optimize: 'closure',
layerOptimize: 'closure',
stripConsole: 'all',
selectorEngine: 'acme',
packages : [
'dojo',
'dijit',
'app-desktop'
],
layers: {
'dojo/dojo': {
include: [
'dojo/request/xhr',
'dojo/i18n',
'dojo/domReady',
'app-desktop/main'
],
boot: true,
customBase: true
}
},
staticHasFeatures: {
'dojo-trace-api': 0,
'dojo-log-api': 0,
'dojo-publish-privates': 0,
'dojo-sync-loader': 0,
'dojo-xhr-factory': 0,
'dojo-test-sniff': 0
}
};
我的新run.js
文件:
require({
async: 1,
isDebug: 1,
baseUrl: '/public',
packages: [
'dojo',
'dijit',
'dojox',
'saga',
'historyjs',
'wysihtml5',
'app-shared',
'jquery',
'jcrop',
'introjs',
'app-desktop'
],
deps: [
'app-desktop/main',
'dojo/domReady!'
],
callback: function (Main) {
debugger;
var main = new Main();
debugger;
main.init();
}
});
我的main.js
文件看起来像这样:
define([
'dojo/_base/declare',
'app-desktop/widgets/Application',
'app-desktop/config/Config',
'saga/utils/Prototyping',
'dojo/window',
'dojo/domReady!'
], function (declare, Application, ConfigClass, Prototyping, win) {
return declare([], {
init: function() {
// ... other stuff
application = new Application();
application.placeAt(document.body);
// ... some more stuff
}
});
});
在build-mode
中,我收到以下错误:
GET http://localhost:4000/app-desktop/run.js 404 (Not Found)
这很奇怪,因为这意味着构建过程使dojo具有外部依赖关系,而不是构建dojoConfig
文件中已经内联的变量。
在normal-mode
中,请求文件,但从未创建应用程序。
在这两种情况下,run.js 文件中设置的两个调试器都没有运行,这意味着由于callback
某种原因从未调用过该方法。
谢谢您的帮助 !