[英]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等效物是什么?
任何帮助是极大的赞赏!
好的,这是我对您要执行的操作的假设:
var
名为some
的全局变量,这只是一种组织东西的方式 some/var/iable
, some/var/iable2
和blah
。 这意味着三个文件和三个define()
调用 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.