Как включить только новые строки в панели сетки Ext 4? - PullRequest
0 голосов
/ 01 июля 2011

Итак, у меня есть ExtJs 4 Grid Panel, который имеет два столбца.

Столбец ONE - это ComboBox с пользовательским средством визуализации

Ext.ux.comboBoxRenderer = function(combo) {
    return function(value) {
        var idx = combo.store.find(combo.valueField, value);
        var rec = combo.store.getAt(idx);

        return (rec == null ? '<img src="/js/extjs4/resources/themes/images/default/grid/loading.gif" />' : rec.get(combo.displayField) );
    };
}

Столбец TWO - это числовой столбец

{
  allowBlank: false,
  header: 'Time',
  dataIndex: 'tedPaidTime',
  align: 'right',
  field: {
     xtype: 'numberfield',
     allowBlank: false,
     minValue: 0,
     maxValue: 100000
  },
  flex: 0.20,
  selectOnFocus:true
}

Теперь, когда я загружаю DataStore, я хочу, чтобы столбец FIRST был доступен только для чтения.Что легко, если я установлю флаг ReadOnly.

Однако у меня есть кнопка, которая добавляет запись NEW для хранения, и я хочу, чтобы эта новая запись НЕ имела флаг readonly.

Таким образом, если вы измените первый столбец и сохраните его, вы не сможете его изменить.Может изменять только новые записи перед их сохранением.

Бизнес-правила требуют, чтобы они удаляли старую запись, если она неверна.

Спасибо.

1 Ответ

0 голосов
/ 19 июля 2011

Я смог решить это сам.

По сути, я записал комбо на событие selectionchange.Затем в событии focus я проверил, есть ли у него требуемый ключ данных из хранилища.Если нет, то я предполагаю новую строку и запускаю следующее:

focus: function(combo) {
           var cb = combo;
           if(newTEDetailRecord) {
              if(newTEDetailRecord.data["activityKey"] == "") {
                 console.log("newTEDetailRecord", newTEDetailRecord);
                 cb.setEditable(true);
                 cb.setReadOnly(false);
                 cb.focus();
                 cb.selectText();
              } else {
                 cb.setReadOnly(true);
              }
           }
        },
...