0

这是对这个问题的跟进。

所以我有这个预 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,在阅读了这个和上一个链接之后,我正在尝试这样的事情

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 等价物?

任何帮助是极大的赞赏!

4

1 回答 1

1

好的,这是我对您尝试做的事情的假设:

  1. 真的some不需要一个用属性调用的全局变量var,这只是一种组织东西的方式
  2. 您需要三个模块,some/var/iablesome/var/iable2blah。这意味着三个文件和三个define()调用
  3. 也不som.var.iablesom.var.iable2真正的可继承类,它们只是普通的旧对象......所以只blah需要使用declare()

因此,您应该创建一个文件som/var/iable.js,它提供一个普通对象:

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

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

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

blah.js然后是提供类对象的第三个模块:

define([
    "dojo/_base/declare",
    "som/var/iable2"
],
function(declare,iable2){
    var parentClasses = [];
    var clazz =  declare(parentClasses, {
        constructor : function(){
            // No need for this.inherited(arguments) in this particular case          
            alert("Welcome to the constructor. Did you know that iable2.D is "+iable2.D+"?");   
        },

    });
    return clazz;
});

我还没有测试所有这些,但是要在您最终想要放置的页面中启动它:

require(["blah",dojo/domReady!"], function(blah){
    var b = new blah();
});

Dojo 应该注意按顺序加载所有内容,以便您收到一条警报,上面写着

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

于 2013-10-24T18:35:39.423 回答