EXTJS6.5: isEditorLink: true не работает для столбцов Dynami c - PullRequest
0 голосов
/ 27 мая 2020

У меня есть сетка ext js, в которой некоторые поля являются динамическими c, и я использую класс Dynami c для загрузки полей Dynami c. Однако я хочу, чтобы значения поля Dynami c отображались в виде гиперссылки. Я поставил атрибут isEditorLink: true , но ничего не происходит.

Вот мой код для класса поля Dynami c:

Ext.define('MyApp.view.generics.ListWithDynamicColumnsMixin', {

    mixinId: 'listWithDynamicColumnsMixin',

    config: {
        columnConfigs: [],
        timeZoneName: null,
        currencySymbol: null,
        dynamicColumnsLabel: null
    },

    constructor(config) {
        this.setColumnConfigs(config.columnConfigs || []);
        this.setTimeZoneName(config.timeZoneName);
        this.setCurrencySymbol(config.currencySymbol);
        this.setDynamicColumnsLabel(config.dynamicColumnsLabel);
    },

    constructCustomColumns(config) {
        const customColumns = this.getColumnConfigs();
        const columns = [];

        for(let i=0; i<customColumns.length; i++) {
            const columnData = customColumns[i];
            const personalFieldType = columnData.type;

            const column = this.createColumn({
                dataIndex: columnData.indexKey,
                text: columnData.label,
                isEditorLink: true,
                hidden: columnData.visible == null ? true : !columnData.visible,
                align: this.getColumnAlignmentBasedOnType(personalFieldType),
                formatCurrency: personalFieldType === StringConstants.CUSTOM_FIELD_MONETARY,
                formatInteger: personalFieldType === StringConstants.CUSTOM_FIELD_NUMERIC,
                stateId: columnData.indexKey,
                renderer: function (value, meta, record) {
                    const personalFields = record.get(this.getDynamicColumnsLabel());
                    return this.customColumnRenderer(personalFields[meta.column.dataIndex], record, personalFieldType);
                },
                width: 100
            });


            if(!Ext.isEmpty(config)) {
                Ext.apply(column, config);
            }
            columns.push(column);
        }

        return columns;
    },

    getColumnAlignmentBasedOnType(type) {
        if(type === StringConstants.CUSTOM_FIELD_MONETARY || type === StringConstants.CUSTOM_FIELD_NUMERIC) {
            return 'right';
        }
        return 'left';
    },

    customColumnRenderer(val, record, type) {
        let value;

        switch (type) {
            case StringConstants.CUSTOM_FIELD_MONETARY: {
                value = this.renderAmount(parseFloat(val), record);
                break;
            }
            case StringConstants.CUSTOM_FIELD_DATE: {
                value = this.formatTimestampValue(val, true);
                break;
            }
            case StringConstants.CUSTOM_FIELD_NUMERIC: {
                value = NumberUtils.formatNumber(val);
                break;
            }
            default: {
                value = val;
                break;
            }
        }

        return Ext.isEmpty(value) ? '' : '<span data-qtip="' + Ext.util.Format.htmlEncode(value) + '">' + value + '</span>';
    },

    formatTimestampValue(value, displayUtc = false) {
        const timestamp = parseFloat(value);

        if(Ext.isNumber(timestamp)) {
            if(displayUtc) {
                return DateUtils.formatDateByCultureAndDisplayUTC(timestamp);
            } else {
                const clientDate = DateUtils.getTzMoment(timestamp, this.getTimeZoneName());

                if(DateUtils.isMidnight(clientDate)) {
                    return DateUtils.formatDateByCulture(timestamp, this.getTimeZoneName());
                }
                return DateUtils.formatDateTimeByCulture(timestamp, ' ', this.getTimeZoneName());
            }
        }

        return '';
    },

    renderAmount(value, record) {
        return Ext.isNumber(value) ? NumberUtils.formatCurrency(value, this.getCurrencySymbol()) : '';
    }

});

Как я могу сделать их как интерактивную гиперссылку, пожалуйста?

Мы будем очень признательны за вашу помощь. Спасибо.

...