ExtJS 4> Сетка редактора строк> Как изменить текст кнопки «Обновить»

#extjs #extjs4

#extjs #extjs4

Вопрос:

Есть ли какой-либо способ изменить текст кнопки «Обновить» в сетке редактора строк ExtJS-4?

Ответ №1:

Хороший вопрос, я просмотрел исходный код, и хотя внутри плагина RowEditing ничего нет, в классе, который он расширяет ‘RowEditor.js » существует следующее:

 Ext.define('Ext.grid.RowEditor', {
    extend: 'Ext.form.Panel',
    requires: [
        'Ext.tip.ToolTip',
        'Ext.util.HashMap',
        'Ext.util.KeyNav'
    ],

    saveBtnText  : 'Update',
    cancelBtnText: 'Cancel',
    ...
});
  

Поэтому я бы предположил, что вам просто нужно переопределить 'saveBtnText' в вашем экземпляре 'Ext.grid.plugin.RowEditing' , поскольку он вызывает родительский конструктор с помощью callParent(аргументы) в RowEditing классе

Ответ №2:

Не так просто и не без взлома в недокументированных областях. Проблема в том, что Ext.grid.plugin.RowEditing непосредственно создается экземпляр Ext.grid.RowEditor , не позволяя вам передавать параметры конфигурации. Итак, в общем случае вам нужно переопределить initEditor() метод в плагине и создать свой собственный редактор строк:

 // ...
plugins: [{
    ptype: 'rowediting',
    clicksToEdit: 2,
    initEditor: function() {
        var me = this,
            grid = me.grid,
            view = me.view,
            headerCt = grid.headerCt;

        return Ext.create('Ext.grid.RowEditor', {
            autoCancel: me.autoCancel,
            errorSummary: me.errorSummary,
            fields: headerCt.getGridColumns(),
            hidden: true,

            // keep a reference..
            editingPlugin: me,
            renderTo: view.el,
            saveBtnText: 'This is my save button text', // <<---
            cancelBtnText: 'This is my cancel button text' // <<---
        });
    },
}],
// ...
  

Комментарии:

1. вы проверили свой код? Метод startEdit() выдает ошибку! «Неопределенный заголовок». С другой стороны, приведенный выше код хорошо подходит для редактирования.. Чтобы решить проблему, инициализируйте плагин в initComponent, а не через отложенную загрузку.

2. Возможно, вы правы. Я не пробовал код с включенной автоматической загрузкой.

Ответ №3:

Для ExtJS 4

 Ext.grid.RowEditor.prototype.cancelBtnText = "This is cancel";
Ext.grid.RowEditor.prototype.saveBtnText = "This is update";
  

Ответ №4:

Это решение заключается в определении прототипа rowEditors. это означает, что эта конфигурация не является общей. Если вы хотите изменить его только для одного редактора или хотите получить разные конфигурации, прототип определенно не решение.

посмотрите на исходный код :

 initEditorConfig: function(){
        var me       = this,
            grid     = me.grid,
            view     = me.view,
            headerCt = grid.headerCt,
            btns     = ['saveBtnText', 'cancelBtnText', 'errorsText', 'dirtyText'],
            b,
            bLen     = btns.length,
            cfg      = {
                autoCancel: me.autoCancel,
                errorSummary: me.errorSummary,
                fields: headerCt.getGridColumns(),
                hidden: true,
                view: view,
                // keep a reference..
                editingPlugin: me
            },
            item;
    for (b = 0; b < bLen; b  ) {
        item = btns[b];

        if (Ext.isDefined(me[item])) {
            cfg[item] = me[item];
        }
    }
    return cfg;
}`
  

этот метод инициализирует редактор строк, и в массиве btns есть цикл:

Массив btns :

 btns = ['saveBtnText', 'cancelBtnText', 'errorsText', 'dirtyText']    

for (b = 0; b < bLen; b  ) {
        item = btns[b];

        if (Ext.isDefined(me[item])) {
            cfg[item] = me[item];
        }
    }
  

В этом цикле для каждой строки в btnArray выполняется поиск, существует ли в cfg то же строковое свойство, если оно найдено, оно добавляется в конфигурацию. Вам просто нужно управлять тем, что этот цикл находит то, что вы хотите изменить:

Пример: мы хотим изменить текст кнопки сохранения:

свойство saveBtnText, которое является первым элементом массива btns, должно существовать в cfg:

 if (Ext.isDefined(me[item])) {
 cfg[item] = me[item];
}
  

этот поиск, если свойство существует : if (Ext.isDefined(me[item]))

если saveBtnText уже существует в свойствах rowEditor, то:

 cfg[item] = me[item];
  

и будет установлено дополнительное свойство конфигурации!!