如何扩展旧式' dojox小部件?

时间:2014-09-01 12:56:06

标签: javascript inheritance dojo amd

我已经编写了自己的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], {

1 个答案:

答案 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