У меня есть сетка 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()) : '';
}
});
Как я могу сделать их как интерактивную гиперссылку, пожалуйста?
Мы будем очень признательны за вашу помощь. Спасибо.