我已经编写了自己的dijit小部件,并扩展了现有小部件。它只是使用扩展小部件作为参数进行新声明,并使用自己的声明而不是扩展小部件。
但是,我对dojox/form/Uploader
有疑问,因为它是旧版式的'使用旧式语法的小部件。不应使用require
返回的对象,而应使用全局对象:
require(['dojox/form/Uploader'], function(Uploader){
var u = new dojox.form.Uploader({})
u.startup()
})
所以,如果我想扩展该小部件,并使用子类'而不是原作,我该怎么做呢?
我不能完全理解的另一件事是,为什么需要使用那种旧式的' dojox/form/Uploader
的语法,因为它使用与' normal'相同的语法创建插件:
return declare("dojox.form.Uploader", [Base, Button, HTML5, IFrame, Flash], {
答案 0 :(得分:1)
我相信你可以像'新风格'(AMD)小部件一样扩展它,即:
require([
"dojo/_base/declare",
"dojox/form/Uploader"
], function(decl) {
var MyUploader = decl(dojox.form.Uploader, {
buildRendering: function() {
this.inherited(arguments);
this.domNode.appendChild(
document.createTextNode(" ← awesome"));
}
});
new MyUploader({}).placeAt("x").startup();
});
或者我误解了你的问题?在Uploader(以及其他一些小部件)中存在“旧样式”语法痕迹的原因可能仅仅是因为没有人有时间将其移植到新样式(因此可能会自动“转换”)。
编辑:实际上,除了设置dojox.form.Uploader全局外,上传器还会返回“新样式”对象。因此,您实际上可以将上面的示例更改为:
require([
"dojo/_base/declare",
"dojox/form/Uploader"
], function(decl, Uploader) {
var MyUploader = decl(Uploader, {
....
自此Uploader === dojox.form.Uploader
。