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