2014-09-01 72 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