2011-11-14 8 views
1

子ウィジェットを使用してDojoフォーム(dijit.form.Form)をクローンする方法を教えてください。理想的には、クローンウィジェットのIDも変更したいと思います。また、ウィジェットに付随する可能性のあるイベントのクローニングにも興味があります。dojo:ウィジェットをクローンする方法?

私はdojo.cloneで少し演奏しましたが、これはDOMオブジェクトでのみ機能します。継承を仮定し

おかげ

+0

例コードが参考になります。 'dijit.form.Form'から継承することが本当に必要なようです。 DojoはIDがあなたにとって一意であることを保証しますので、これは問題ではありません。 – fncomp

+0

Dojo 1.7で非同期ローダーを使用していますか? – fncomp

+0

いいえ、Dojo 1.7で非同期ローダーを使用していません。 Dojo 1.6.1の使用 – Ayyoudy

答えて

2

はその後、私はちょうど新しいウィジェットを作ると思います、あなたが必要なものは本当にあります。非同期ローダーとDojo 1.7を使用していると仮定します。

define([ 
    'dojo', 
    'module', 
    'dijit/form/Form', 
    'dijit/form/TextBox', 
    'dijit/_TemplatedMixin', 
    'dijit/_WidgetsInTemplatedMixin' 
], function (dojo, module, Form, TextBox, _TemplatedMixin, _WidgetsInTemplatedMixin) { 
    // I have a wrapper for declare that handles this, but... 
    return dojo.declare(module.id.replace(/\//g, '.'), [Form, _TemplatedMixin, _WidgetsInTemplatedMixin], { 

     widgetsInTemplate: true, 

     // Make a template, I usually use a separate file. 
     templateString: '<form data-dojo-type="dijit.form.Form">' + 
          '<input data-dojo-type="dijit.form.TextBox" />' + 
         '</form>' 

     postCreate: function() { 
      this.inherited(arguments); 
      // Attach your specialized events. 
     } 
    }); 
}); 

あなたが同期ローダーを使用している場合は、あなたがdojo.declareをお勧めします:

dojo.provide('mynamespace.CustomForm'); 

// Do this for all child widgets and anything else you use. 
dojo.require('dijit.form.Form'); 
dojo.require('dijit._Templated'); 
dojo.require('dijit.form.TextBox'); 

dojo.declare('mynamespace.CustomForm', [dijit.form.Form, dijit._Templated], { 

     widgetsInTemplate: true, 

     // Make a template, I usually use a separate file. 
     templateString: '<form dojoType="dijit.form.Form">' + 
          '<input dojoType="dijit.form.TextBox" />' + 
         '</form>' 

     postCreate: function() { 
      this.inherited(arguments); 
      // Attach your specialized events. 
     } 
    }); 
}); 

あなたのモジュールは、その後var container = someElement; new path.to.File({}, container);で利用できるようになります私のような何かをしたいです。あるいは、マークアップでウィジェットを宣言することもできます。これをより具体化したり、Dojoの異なるバージョンに適用できるかどうかを教えてください。

関連する問題