1
我如何去克隆一個Dojo窗體(dijit.form.Form)及其子窗口小部件?理想情況下,我想要更改克隆小部件的Id。我也有興趣克隆可能附加到小部件的任何事件。dojo:如何克隆小部件?
我玩過dojo.clone,但只適用於DOM對象。
感謝
我如何去克隆一個Dojo窗體(dijit.form.Form)及其子窗口小部件?理想情況下,我想要更改克隆小部件的Id。我也有興趣克隆可能附加到小部件的任何事件。dojo:如何克隆小部件?
我玩過dojo.clone,但只適用於DOM對象。
感謝
假設繼承真的是你需要什麼,然後我只是做一個新部件。假設你正在使用異步加載器和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。
示例代碼會有幫助。看起來你真的需要從'dijit.form.Form'繼承。 Dojo會處理確保id對你來說是獨一無二的,所以這應該是一個非問題。 – fncomp
您是否在Dojo 1.7中使用異步加載器? – fncomp
不,不在Dojo 1.7中使用異步加載器。使用Dojo 1.6.1 – Ayyoudy