2014-09-01 4 views
0

Я уже написал свои собственные виджеты диджита, а также расширил существующий. Это просто создание нового объявления с расширенным виджетами в качестве аргумента и использование собственного, а не расширенного.Как расширить виджеты dojox «старого стиля»?

Однако у меня есть проблема с dojox/form/Uploader, потому что это виджет «старого стиля» с использованием синтаксиса старого стиля. Вместо того чтобы использовать объект, возвращаемый require, следует использовать глобальный объект:

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

Так что, если я хочу продлить этот виджет, и использование ребенка «класса» вместо оригинала, то как я на самом деле сделать что?

Другое дело, я не в полной мере понять, почему Whe нужно использовать этот синтаксис «старый стиль» для dojox/form/Uploader, потому что она создана с тем же синтаксисом, как «нормальный» виджета:

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

ответ

1

I полагаю, вы можете продлить его так же, как «новый стиль» (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 (и некоторых других виджетах), вероятно, заключается только в том, что у кого-то еще не было времени перенести его в новый стиль (поэтому он, вероятно, автоматически «конвертировался»).

Редактировать: На самом деле, Uploader возвращает объект «новый стиль» в дополнение к установке dojox.form.Uploader global. Таким образом, вы можете изменить приведенный выше пример для:

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

так Uploader === dojox.form.Uploader здесь.

+0

Точка зрения, которая была для меня неясной, заключалась в том, что мне не следует использовать переменную «Uploader», но глобальную ссылку «dojox.form.Uploader». Я не был уверен, к чему обратиться с 'declare'. –

+0

Это несколько сбивает с толку, да. На самом деле, мой ответ тоже запутан, вы, вероятно, не используете глобальный dojox.form.Uploader, так как он действительно возвращает объект «нового стиля» в дополнение к установке глобального dojox.form.Uploader. – Frode

Смежные вопросы