javascript - 如何扩展 'old style' dojox 小部件?

标签 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 使用“旧式”语法,因为它是使用与“正常”相同的语法创建的小部件:

    return declare("dojox.form.Uploader", [Base, Button, HTML5, IFrame, Flash], {

最佳答案

我相信你可以像“新风格”(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 之外,Uploader 还返回一个“新样式”对象。所以你实际上可以将上面的例子改为:

require([
    "dojo/_base/declare", 
    "dojox/form/Uploader"
], function(decl, Uploader) {
    var MyUploader = decl(Uploader, {
    ....

因为Uploader === dojox.form.Uploader在这里。

关于javascript - 如何扩展 'old style' dojox 小部件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25606379/

相关文章:

python - 元类冲突、多重继承、实例为父类

javascript - 使用 Dojo xhr 通过 json 和文件上传发送多部分表单

javascript - Dojo require,模块加载失败时连接报错

javascript - 根据正整数或负整数更改文本颜色

javascript onbeforeunload 然后 onunload 事件

c++ - 如何避免在 C++ 的派生类中重复基类构造函数参数?

java - 通过实现接口(interface),它继承了不需要的方法

dojo - 最初从 dijit.form.FilteringSelect 中存储选择的值

javascript - 将 JavaScript 对象项放入单独的数组中

JavaScript参数依赖类继承