dojo:如何克隆小部件?

时间:2011-11-14 05:27:52

标签: javascript events dom dojo clone

如何使用子窗口小部件克隆Dojo窗体(dijit.form.Form)?理想情况下,我也想改变克隆小部件的Id。我也有兴趣克隆可能附加到小部件的任何事件。

我使用dojo.clone玩了一下,但这只适用于DOM对象。

由于

1 个答案:

答案 0 :(得分: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,请告诉我。