2014-02-10 1 views
0

매핑 된 Ext.util.Filters 집합을 기반으로 저장소를 필터링하려고합니다. 예 :레코드 인스턴스에서 일치하는 항목을 반환하는 Ext.data.Store를 필터링하는 방법은 무엇입니까?

comboBox.store.filter(_.map(this.displayFields, function (displayField) { 
    return { 
    property: displayField.name, 
    value: queryString, 
    anyMatch: true 
    }; 
})); 

this.displayFields는 내 콤보 상자 템플릿의 표시 필드 목록입니다. 내 콤보 박스 템플릿에서 나는 다음과 같은 것을 가지고있다.

'{codeValue} {displayValue} {descriptionValue}' 

displayValue는 내 콤보 박스의 displayField 속성이다. 내 콤보 상자에서 'co'를 검색하면 필터를 상점에 적용 할 때 모든 displayField에 'co'값이 있어야합니다. 내 필터 모양은 다음과 같습니다.

[ 
    {property: 'codeValue', value: 'co'}, 
    {property: 'displayValue', value: 'co'}, 
    {property: 'desciptionValue', value: 'co'} 
] 

displayFields '속성에'co '값이있는 레코드 집합을 원합니다.

답변

1

각 필터는 이전 필터 다음에 적용되므로 논리적 "and"가됩니다. 당신은 아마 그것을 가지고 있거나 물어 보지 않을 것입니다. 그렇다면 Ext에서 "또는"를 어떻게 얻습니까? 해당 값이 "또는"값인 경우 value에 대해 정규식을 사용할 수 있지만 property에 원할 수 있습니다. 내가 아는 한 기본 제공 구성 옵션이 없지만 원하는 모든 작업을 filterFn에서 수행 할 수 있습니다.

여기에 자신의 코드 또는 이름으로 하나,에 '는'모든 레코드를 표시 콤보, 예를 들어, 그리고 단지 그 :

Ext.widget('combo', { 
    renderTo: Ext.getBody() 
    ,store: { 
     fields: ['id', 'code', 'name'] 
     ,data: [ 
      {id: 1, code: 'a', name: 'Foo'} 
      ,{id: 2, code: 'b', name: 'Bar'} 
      ,{id: 3, code: 'ba', name: 'Baz'} 
      ,{id: 4, code: 'z', name: 'Zoo'} 
     ] 
     ,filters: [{ 
      filterFn: function(record) { 
       var match = false; 
       Ext.each(fields, function(field) { 
        if (re.test(record.get(field))) { 
         match = true; 
         return false; // break the loop 
        } 
       }); 
       return match; 
      } 
     }] 
    } 
    ,displayField: 'name' 
    ,valueField: 'id' 
}); 
+0

나는 그것을 시도 이눔 수 있습니다. 답변 해 주셔서 감사합니다. – squistbe

관련 문제