Dojo提供 - 更新AMD的遗产

时间:2013-10-24 17:46:23

标签: dojo upgrade amd legacy

这是this问题的后续问题。

所以我有这个AMD前dojo代码:

dojo.require(...);
dojo.provide("abc.def.foo");
som.var.iable = {A:1,B:2};
som.var.iable2 = {C: 3, D:som.var.iable.B}
dojo.declare("blah",[],{
     //code based on the above variables
});

对于AMD,在阅读this和之前的链接后,我正在尝试这样的事情

som.var.iable = {A:1,B:2};
som.var.iable2 = {C: 3, D:som.var.iable.B}

define([
    "dojo/_base/declare", 
], function(declare){
   return declare("abc.def.foo", null {               
   });
});

define([
    "dojo/_base/declare", 
], function(declare){
   som.var.iable = {A:1,B:2};
som.var.iable2 = {C: 3, D:som.var.iable.B}
   return declare("blah", null {
        //code based on the above variables
   });
});

显然这失败了,因为没有像som.var.iable那样的对象结构。我可以,但我的问题是它是如何在遗留代码中工作的?什么是正确的AMD等价物?

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

好的,这是我对你要做的事情的假设:

  1. 您需要三个模块,somevarsome/var/iable。这意味着三个文件和三个some/var/iable2电话
  2. blahdefine()都不是真正的可继承类,它们只是普通的旧对象...所以只有som.var.iable需要使用som.var.iable2

  3. 因此,您应该创建一个文件blah,它提供了一个普通对象:

    declare()

    另一个叫som/var/iable.js,它是一个提供普通对象的模块:

    define([
    ],
    function(){
        return {A:1,B,2}
    });
    

    然后是提供Class-object的第三个模块som/var/iable2.js

    define([
        "som/var/iable",
    ],
    function(iable){
        return {C: 3, D:iable.B}
    });
    

    我还没有对所有这些进行过测试,但是要在你最终想要放入的页面中开始:

    blah.js

    Dojo应该负责按顺序加载所有内容,以便您收到一条提示

    的警告
      

    欢迎使用构造函数。你知道iable2.D是2吗?