2017-12-18 7 views
0

ローカルストアではなく、サーバー上でフィルタリングする複数のフィールドにフィルタを作成するにはどうすればよいですか?複数のフィールドにリモートフィルタを作成する方法は? Ext Js 5

これまでのところ、私はローカルにしか行きませんでした。

onFilter: function(field, newValue, oldValue, options){ 
    var grid = Ext.getCmp('grid'); 
    grid.store.clearFilter(); 

    if (newValue) { 
     var matcher = new RegExp(Ext.String.escapeRegex(newValue), "i"); 
     grid.store.filter({ 
      filterFn: function(record) { 
       return matcher.test(record.get('id')) || 
        matcher.test(record.get('names')); 
      } 
     }); 
    } 
} 

答えて

1

リモートフィルタリングでfilterFnを使用してフィルタを設定することはできません。リモートフィルタリングは、バックエンドに送信されるプロパティ値と演算子の組み合わせのみを使用でき、バックエンドによって評価され、処理されなければなりません。

あなたはもちろん、バックエンドに複数のフィルタを送信することができ、複数のプロパティに基づいてフィルタリングするには、次の

store.addFilters([{ 
    id: 'idFilter', 
    property: 'id', 
    operator: 'eq', 
    value: newValue 
},{ 
    id: 'nameFilter', 
    property: 'names', 
    operator: 'like', 
    value: newValue 
}]); 

バックエンドが、その後評価し、データにこれらのフィルタを適用する必要があります。値は、クライアント側の検証や使用せずにバックエンドに送信されているので、あなたもバックエンドに任意のプロパティまたはオペレータ名を送ることができます:あなたはちょうど正しくプロパティ名を解析するために、あなたのバックエンドを伝えなければならないだろう

store.addFilters([{ 
    id: 'idOrNameFilter', 
    property: 'idOrName', 
    operator: 'somethingsomething', 
    value: newValue 
}]); 

それに応じて動作します。

関連する問題