我是一个使用dojo 1.3.1开发前端的项目,并且有大约100多个自定义小部件和dojo文件。
我的任务是将所有代码从 Dojo 1.3.1 迁移到 Dojo 1.9.3 (最新到目前为止)。
我试图用1.9.3替换Dojo 1.3.1源代码但是一切都坏了,我在UI上看不到任何东西。显然这是因为两个版本之间的主要语法差异,特别是定义模块和包括模块的语法的变化。
这是我改变所有100多个文件中语法的唯一方法,并检查功能+用户界面是否有效或者可能有另一种更好的解决方法吗?
修改
我使用dojo-amd-converter将自定义模块从AMD之前转换为AMD。有一个文件转换如下:
旧代码:
dojo.provide("myModule.objects");
dojo.require("dojo._base");
myModule.objects.psCookie = (
function () {
// Default Values
var defaultArgs = {
ident: "",
email: ""
}
return function(args) {
return myModule.objects.cleanArgs(args, defaultArgs);
}
}
)();
转换代码:
define([
"dojo/_base",
"dojo/_base/lang"
], function (_base, lang) {
myModule.objects.psCookie = (
function () {
// Default Values
var defaultArgs = {
ident: "",
email: ""
}
return function(args) {
return myModule.objects.cleanArgs(args, defaultArgs);
}
}
)();
现在,我在转换后面临几个问题:
GET http://localhost:8080/td/js/dojo-release-1.9.3/dojo/_base.js 404 (Not Found)
Uncaught TypeError: Cannot set property 'psCookie' of undefined /td/js/myModule/objects.js:6
知道如何解决这些问题吗?
答案 0 :(得分:1)
此处有两件事情可以解决以下错误:
GET http://localhost:8080/td/js/dojo-release-1.9.3/dojo/_base.js 404 (Not Found)
您只需从模块列表中删除dojo/_base
,例如:
define([
"dojo/_base/lang"
], function (lang) {
// Rest of your code
});
然后,整个dojo.provide()
系统消失了,这意味着没有为您提供作为模块的对象(因此您得到该对象为undefined
的错误)。除此之外,您只需自己返回一个对象,例如:
define([
"dojo/_base/lang"
], function(lang) {
return {
psCookie: /** Your code */
};
});
但是,我对你的例子中psCookie
的作用并不熟悉,所以你可能需要进一步解释一下。