2015-12-18 6 views
0

Привет Я пытался редактировать данные перед хранилищем данных в сетку, потому что мне нужно рассчитать некоторые значения.ExtJS checkcolumns не может редактировать после модификации модели

Я изменил поле модели, как этот

fields: ['name', 'email', 'phone', 
       { 
        name: 'check', 
        convert: function(value, record) { 
         return 1; 
        } 
       } 
     ] 

и привязать dataIndex к колонку

columns: [{ 
      ... 
      } 
     }, { 
      ... 
     }, { 
      xtype: 'checkcolumn',   
      text: 'Phone', 
      dataIndex: 'check' 
     }] 

Когда я выполняю это я нашел, что checkcolumn не может быть редактируемой. Что в этом плохого?

Sample

ответ

2

Это потому, что вы всегда возвращающие 1. Вам нужно сделать, например:

name: 'check', 
mapping: 'phone', 
convert: function(value, record) { 
    return value ? 1 : 0; 
} 
1

Ваша проблема является функция преобразования. Ваша контрольная колонка по-прежнему активна, но каждый раз, когда ваше значение оценивается, оно отправляется через функцию преобразования и возвращает 1 (или true, поскольку оно используется в флажке)

Из того, что я собираюсь, вы хотите установить значение по умолчанию для столбец проверки, то вы должны работать с DefaultValue собственности определения вашей проверки столбца

здесь вы можете узнать больше о самой модели :) https://docs.sencha.com/extjs/5.1/5.1.1-apidocs/#!/api/Ext.data.Model

для полевых конфигураций, вы можете проверить здесь https://docs.sencha.com/extjs/5.1/5.1.1-apidocs/#!/api/Ext.data.field.Field

Итак, либо бросьте свою функцию преобразования, либо верните правильное значение (true или false, 1 или 0) на основе параметра значения в вашей функции преобразования.

1

Когда вы нажимаете контрольное поле, конвертер автоматически вызывается, а в вашем convert:function вы всегда устанавливаете его значение для проверки. Попытки установить значение с различным чеком или удалить пользовательский преобразователь

здесь ваша скрипку изменения:

https://fiddle.sencha.com/#fiddle/12p5

и скрипка код:

Ext.application({ 
name: 'Fiddle', 

launch: function() { 
    var store = Ext.create('Ext.data.Store', { 
     fields: ['name', 'email', 'phone', { 
      name: 'check', 
      convert: function(value, record) { 
       debugger; //You can see that this function is invoked when you check the column 
       return value ? 1 : 0; //Modify the logic or don't force the value 
      } 
     }], 
     data: [{ 
      name: 'Lisa', 
      email: '[email protected]', 
      phone: '555-111-1224', 
      check: 1 //initialize with checked if necessary 

     }, { 
      name: 'Bart', 
      email: '[email protected]', 
      phone: '555-222-1234', 
      check: 1 
     }, { 
      name: 'Homer', 
      email: '[email protected]', 
      phone: '555-222-1244', 
      check: 1 
     }, { 
      name: 'Marge', 
      email: '[email protected]', 
      phone: '555-222-1254', 
      check: 1 
     }] 
    }); 

    Ext.create('Ext.grid.Panel', { 
     title: 'Simpsons', 
     store: store, 
     height: 200, 
     width: 400, 
     renderTo: Ext.getBody(), 
     columns: [{ 
      text: 'Name', 
      dataIndex: 'name', 
      renderer: function(value, meta) { 
       meta.tdCls += ' image-hover'; 

       return '<span class="name">' + value + '</span><img src="http://sstatic.net/stackoverflow/img/icon-16.png" />'; 
      } 
     }, { 
      text: 'Email', 
      dataIndex: 'email', 
      flex: 1 
     }, { 
      xtype: 'checkcolumn', 
      text: 'Phone', 
      dataIndex: 'check' 
     }] 
    }); 
} 
});