додзё: как клонировать виджеты? - PullRequest
1 голос
/ 14 ноября 2011

Как мне клонировать форму Dojo (dijit.form.Form) с ее дочерними виджетами? В идеале я хотел бы также изменить идентификатор виджетов клонов. Мне также было бы интересно клонировать любые события, которые могут быть прикреплены к виджетам.

Я немного поиграл с dojo.clone , но это работает только для объектов DOM.

Спасибо

1 Ответ

2 голосов
/ 14 ноября 2011

Если предположить, что наследование действительно то, что вам нужно, тогда я просто создаю новый виджет.Предполагая, что вы используете асинхронный загрузчик и 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.

...