从Dojo 1.3.1迁移到1.9.3

时间:2014-03-17 12:32:58

标签: javascript dojo migration

我是一个使用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

知道如何解决这些问题吗?

1 个答案:

答案 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的作用并不熟悉,所以你可能需要进一步解释一下。

相关问题