繁体   English   中英

Dojo提供-向AMD更新旧版

[英]Dojo provide - update legacy to AMD

这是问题的后续措施。

所以我有这个预先的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等效物是什么?

任何帮助是极大的赞赏!

好的,这是我对您要执行的操作的假设:

  1. 实际上并不需要带有属性var名为some的全局变量,这只是一种组织东西的方式
  2. 您需要三个模块, some/var/iablesome/var/iable2blah 这意味着三个文件和三个define()调用
  3. 无论som.var.iable也不som.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提供了Class对象:

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吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM