我正在努力解决这个问题:
我在文件Module1.js中有这个简单的模块:
define(['dojo/_base/declare', 'esri/map'], function (declare, map) {
return declare(null,
{
name: "Module 1 name",
constructor: function() {
this.name = "module 1";
//this.age = age;
//this.currentResidence = currentResidence;
},
doSomething: function() {
alert("calling from Module1");
}
});
});
我正在尝试定义一个继承自Module1的Module2,但似乎无法找到正确的语法:这就是我目前所拥有的:
define(["dojo/_base/declare",
"esri/map",
"tut/Module1"],
function (declare, map, Module1) {
return declare(null, [Module1], // or tut/Module1
{
name: "Module 2 name",
constructor: function () {
this.name = "module 2";
//this.age = age;
},
doSomething: function () {
this.inherited(arguments); // Call superclass method...
alert("calling from Module 2");
},
doSomething1: function () {
alert("calling do soething 1 from module 2");
}
});
});
我的代码中的其他地方,我这样做:
require(["tut/Module1", "tut/Module2"], function (Module1, Module2) {
var m = new Module1();
m.doSomething();
var m2 = new Module2();
m2.doSomething();
});
我在加载加载dojo的ESRI脚本之前定义了以下dojoConfig,如下所示:
<script type="text/javascript">
var dojoConfig = {
async : true,
packages: [{ name: "tut", location: liveString + '/scripts/xxxx/utilities'}]
};
</script>
<script type="text/javascript" src="http://serverapi.arcgisonline.com/jsapi/arcgis/?v=3.0compact"></script>
对Module1的调用可以告诉我我的包定义是正确的。但是,对Module2的调用抛出一个异常,说Object [object object]没有方法'doSomething'。我尝试了许多不同的排列,使用manual 来回查找,但找不到合适的语法。现在我只是猜测所以需要一些帮助。
如何使用Dojo 1.7语法继承Module1?
答案 0 :(得分:2)
对this.inherited(arguments)
的调用将起作用(如果声明不会抛出'不是有效的mixin',并且构造函数方法都不会抛出错误。)
尝试
define(["dojo/_base/declare",
"esri/map"],
function (declare, map) {
return declare("tut.Module1", [], { // or tut>>.<<Module1
constructor: function() { this.name='a'; console.log('a ctor'); }
log: function() { console.log(this.name); }
});
}
});
define(["dojo/_base/declare",
"esri/map",
"tut/Module1"],
function (declare, map, Module1) {
return declare("tut.Module2", [Module1],
constructor: function() { this.name='B'; console.log('B ctor'); }
log: function() { this.inherited(arguments); console.log(this.name); }
});
}
});
尝试迭代模块实例中的constructor._meta'base'('new Module()。constructor._meta'),这应该可以了解this.inherited是如何工作的
致电
require(["tut/Module2"], function (M2) {
var m = new M2();
console.log('created');
m.log()
});
会输出
“B ctor”
“A ctor”
“创造”
“A”
“B”