2015-12-22 48 views
2

我有一个Gridpanel,其中一列设置为组合框...我加载ID作为valueField,然后在渲染器中搜索带有ID的商店,并显示相应的名称作为displayField 这样的 -在Ext JS 5中的自定义分拣机网格列

view.renderer = function(value) { 
     var store = view.getEditor().getStore(), 
      record; 

     if (value && store) { 
      record = store.findRecord(view.valueField, value, 0, false, false, true); 

      if (record) { 
       return record.get(view.displayField); 
      } 
     } 

     return value; 
    }; 

当我点击升序/降序排序此列得到由ID(valueField)进行分类。我想让它变得按名称进行排序(displayField)

回答

0

添加custom sorter到你的网格列,例如

sorter:function(o1, o2) { 
    return ((o1.get(view.displayField)>o2.get(view.displayField)) ? 1 : -1); 
} 
+1

我使用的是extjs 5,似乎没有分拣机可用于网格列 –

0

我做了以下内容:

我通过AJAX返回值:ID-描述 ,并显示出我格式化像Ext.util.Format如下:

Ext.util.Format.detipolancamento = function(v) 
{ 
    v = v.split("-"); 
    for (i = 0; i < todastipolancamento.length; i++) { 
    desctipolancamento = todastipolancamento[i].toString(); 
    var tipolancamento = desctipolancamento.split(","); 
    if (v[0] == tipolancamento[0]) { 
     return tipolancamento[1]; 
    } 
    } 
}; 

其中todastipolancamento是一个包含组合框值的数组。

我在列中使用: formatter: 'detipolancamento',

然后在型号 - >字段,我把自定义的sortType: {name: 'tipolancamento', sortType: 'asPerson2'},

,最后我用asPerson2为通过描述来进行排序并没有ID,像这样:

Ext.apply(Ext.data.SortTypes, { 
    asPerson: function(person){ 
    return person.toLowerCase(); 
    }, 
    asPerson2: function(person){ 
    var retorno = person.split('-'); 
    return retorno[1].toLowerCase(); 
    }  
});