代码之家  ›  专栏  ›  技术社区  ›  Cjxcz Odjcayrwl

如何扩展“老式”dojox小部件?

  •  0
  • Cjxcz Odjcayrwl  · 技术社区  · 11 年前

    我已经编写了自己的dijit小部件,并扩展了现有的小部件。它只是使用扩展的小部件作为参数来创建新的声明,并使用自己的声明而不是扩展的声明。

    然而,我有一个问题 dojox/form/Uploader ,因为它是使用旧样式语法的“旧样式”小部件。而不是使用返回的对象 require ,应使用全局对象:

      require(['dojox/form/Uploader'], function(Uploader){
        var u = new dojox.form.Uploader({})
        u.startup()
      })
    

    所以,如果我想扩展这个小部件,并使用子“类”而不是原始的,我应该如何真正做到这一点?

    另一件我不完全理解的事情是,为什么我们需要使用“老式”语法 dojox/form/上传程序 ,因为它是用与“normal”小部件相同的语法创建的:

        return declare("dojox.form.Uploader", [Base, Button, HTML5, IFrame, Flash], {
    
    1 回复  |  直到 11 年前
        1
  •  1
  •   Frode    11 年前

    我相信您可以像“新样式”(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 在这里