2013-09-05 4 views
0

У меня есть панель Grid с несколькими столбцами. Теперь я хочу установить новый класс в столбце строки, когда значения не совпадают друг с другом. Но как я могу добиться успеха в столбце в другой строке? Ее мой код, который я попробовал, но он говорит, идентификатор не определен:EXTJS4: Сравните два поля в GridPanel друг с другом

...{ 
    header: 'CRS', 
    dataIndex: 'crs', 
    id:'crs', 
    flex:1, 
    renderer: function(value, meta) { 

     console.log("csv-->"+Ext.getCmp('csv').value); 

     if(value==Ext.getCmp('csv').value) 
      { 
       //change class 
      } 

    } 
}, 
{ 
    header: 'CSV', 
    dataIndex: 'csv', 
    id:'csv', 
    flex:1 
},... 

ответ

1

У меня есть это! Это работает для меня:

{ 
    header: 'CSV', 
    dataIndex: 'csv', 
    flex:1, 
    renderer: function(grid, rowIndex, rowdata) { 
     var csv_data=rowdata.data.csv; 
     var crs_data=rowdata.data.crs; 
     if (csv_data != crs_data) { 
      rowIndex.tdCls = "red-class"; 
     } 
      return csv_data; 

    } 
}, 
+2

Рад, что он работает, но я бы предложил две дополнительные вещи: 1.) передать все аргументы в вашем рендерере ... вы никогда не знаете, когда они вам понадобятся, и это хорошо для других разработчиков, которые смотрят ваш код, чтобы знать все, что доступный. 2.) Используйте метод API - record.get (fieldName) - для получения данных из записи (и аргумент * должен быть «записывать» не «rowdata», поскольку переданный объект является полным Ext.data. Пример модели). Удачи. – existdissolve

2

код вы опубликовали, кажется, не соответствует тому, что вы просите. В соответствии с вашим кодом, появляется, что вы пытаетесь сравнить значения в столбцах в той же строке, а не в другой строке. Так что это?

Во всяком случае, при условии, что ваш код указывает на то, что вы хотите, не забудьте взглянуть на документы для визуализатора: http://docs.sencha.com/extjs/4.2.1/#!/api/Ext.grid.column.Column-cfg-renderer

Один из аргументов, передаваемых методу визуализатора является «запись», которая будет содержать все значения для записи, которая заполняет значения для всей строки. Если вы хотите, чтобы сравнить значения по столбцам, вы могли бы сделать что-то вроде:

if(value==record.get('csv ')) { 
    ...do something here... 
} 

Если вам действительно нужно сравнить значения по строк, то «магазин» также получает передается в качестве одного из аргументов в рендерер, поэтому вы можете сравнивать значения с определенными значениями строк таким образом.

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

+0

Вы правы, извините, я хочу, чтобы сравнить значения в одном ряду! Смотрите мою новую запись! Спасибо за вашу помощь! – Zwen2012

0
{ 
    header: 'CSV', 
    dataIndex: 'csv', 
    flex:1, 
    renderer: function(value, meta, record) { 
     var crs = record.get('crs'); 
     if (value && crs) 
     { 
      if (value != crs) { 
       meta.tdCls = "red-class"; 
      } 
     } 
     return value; 
    } 
}, 

переписана для ExtJS 4, вы можете использовать значение, как вы установите его в dataIndex, и потому что запись рекомендуемого ExtJS 4 способа получить значение будет правильным получить метод.

Всего ХА есть тонны больше свойств на визуализатора, вы можете найти полный список здесь: http://docs.sencha.com/extjs/4.2.2/#!/api/Ext.grid.column.Column-cfg-renderer

Смежные вопросы