2014-09-01 58 views
0

我已经编写了自己的dijit小部件,并扩展了现有的小部件。它只是使用扩展小部件作为参数进行新的声明,并使用自己的而不是扩展小部件。如何扩展'旧式'dojox小工具?

但是,我有一个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], { 

回答

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全局之外,上传器还返回一个'new style'对象。所以,你可以真正改变上面的例子:

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

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

+0

对我来说不清楚的确切的一点是,我不应该使用'Uploader'变量,而是'dojox.form.Uploader'全局引用。我不确定用“声明”来引用什么。 – 2014-09-02 14:52:54

+0

这有点令人困惑,是的。实际上,我的回答也很混乱,你可能不应该使用全局的dojox.form.Uploader,因为除了设置全局的dojox.form.Uploader之外,它实际上会返回一个'new style'对象。 – Frode 2014-09-02 15:32:23