Разработка пользовательских виджетов CQ5. Сохранение жестко заданных значений вне сценария виджета. Использование глобальных переменных.

Я новичок в CQ5 и ExtJS. Я создал виджет cq extjs. Теперь в моем js-файле виджета много жестко запрограммированных строк. Например, fieldLabel, fieldDescription, addItemLabel, rootPath и т. д. и т. д. Я хочу передать этот виджет другой команде, но не хочу, чтобы они вносили какие-либо изменения в мой js-скрипт виджета, так как они могут ошибаться, поскольку они совершенно не технические люди. .

Я хотел бы создать еще один отдельный файл js и объявить некоторые глобальные переменные и установить значения вышеупомянутых многих многих полей, прочитав значения из глобальных переменных.

Я бы назвал этот отдельный файл js mywidgetconfig.js и попрошу другую команду внести изменения в соответствии с их потребностями только в этом файле.

Например, в моем виджете я жестко запрограммировал -->

{
fieldLabel : 'Multi Field to setup links'
}

Я хотел бы сохранить это значение в mywidgetconfig.js как:

INNERMULTIFIELD_FIELD_LABEL_TEXT_STRING : 'Multi Field to setup links',

и так далее

INNERMULTIFIELD_FIELD_DESC_TEXT_STRING : 'blah blah blah'

и в моем реальном виджете js я мог получить доступ к значениям как -->

{
fieldLabel : MyNamespace.INNERMULTIFIELD_FIELD_LABEL_TEXT_STRING,
fieldDescription: MyNamespace.INNERMULTIFIELD_FIELD_DESC_TEXT_STRING
}

Это возможно?


person techrookie    schedule 14.03.2014    source источник


Ответы (1)


Да, это возможно. Вы можете создать переменные в своем пространстве имен, а затем создать новый файл js (mywidgetconfig.js, как вы хотите), который будет содержать только ту конфигурацию, которую вы хотите изменить для новой команды.

Например, у вас может быть собственный виджет (customwidget.js), как показано ниже, который определяет переменные в своем пространстве имен.

/**
 * @class Myns.CustomWidget
 * @extends CQ.form.CompositeField
 * This is a custom widget based on {@link CQ.form.CompositeField}.
 * @constructor
 * Creates a new CustomWidget.
 * @param {Object} config The config object
 */
var Myns = {};
Myns.CustomWidget = CQ.Ext.extend(CQ.form.CompositeField, {

    hiddenField: null,
    /**
     * @private
     * @type CQ.Ext.form.TextField
     */
    textf: null,
    /**
     * @private
     * @type CQ.Ext.form.NumberField
     */
    numberf: null,

    constructor: function(config) {
        config = config || { };
        var defaults = {
            "border": true,
            "layout": "form"
        };
        config = CQ.Util.applyDefaults(config, defaults);
        Myns.CustomWidget.superclass.constructor.call(this, config);
    },


    // overriding CQ.Ext.Component#initComponent
    initComponent: function() {
        Myns.CustomWidget.superclass.initComponent.call(this);

        this.hiddenField = new CQ.Ext.form.Hidden({
            name: this.name
        });
        this.add(this.hiddenField);

        this.textf = new CQ.Ext.form.TextField({
            fieldLabel: Myns.TEXTFIELDLABEL, //using variable
            allowBlank: false
        });
        this.add(this.textf);

        this.numberf = new CQ.Ext.form.NumberField({
            fieldLabel: Myns.NUMBERFIELDLABEL, //using variable
            allowBlank: false
        });
        this.add(this.numberf);
    }
    // rest of the code goes here
});
Myns.TEXTFIELDLABEL = "Enter Text"; //defining variable
Myns.NUMBERFIELDLABEL = "Enter a number"; //defining variable
// register xtype 
CQ.Ext.reg('customwidget', Myns.CustomWidget);

И ваш mywidgetconfig.js будет содержать те переменные, которые могут быть изменены другими.

/*
* Field Label for the text field
*/
Myns.TEXTFIELDLABEL = "New Text"; 

/*
* Field label for number field
*/
Myns.NUMBERFIELDLABEL = "New number"; 

И в вашем js.txt убедитесь, что вы добавили mywidgetconfig.js под вашим customwidget.js

#base=js
customwidget.js
mywidgetconfig.js
person rakhi4110    schedule 14.03.2014
comment
Если это так просто... Я попробую и вернусь. - person techrookie; 14.03.2014
comment
Я потратил так много времени на беспокойство о глобальных переменных и одноэлементном классе, а что нет. Никогда не думал в этом направлении. Как глупо!! - person techrookie; 14.03.2014