2017-08-07 3 views
0

私はAngular Web AppのJavascipt用にAzure Mobile Servicesライブラリを使用しています。ここにあるドキュメントによれば、https://github.com/Azure/azure-mobile-services/blob/master/docs/mobile-services-html-how-to-use-client-library.md#how-to-filter-returned-dataAzure Mobileサービスに問い合わせるときに既存のフィルタ関数にフィルタを追加する方法

返されるデータをフィルタリングする方法は2通りあります。 1つはJSONオブジェクトを渡し、もう1つは(複雑なフィルタリングのために)フィルタ関数を渡しています。私はフィルタ関数を使用しているので、より大きいか小さい条件を必要とするstartDateやendDateのような列に対しては、関係演算子を使用する必要があります。

私はフロントエンドに設定された特定のフィルタに基づいてフィルタ関数を返す、以下のような関数を持っていますが、さまざまなフィルタに対応するために、私は多くのif..else条件を使用しなければなりませんそれらのうちのどれが設定され、どのフィルタ関数が返されるかを示します。

function getFilterFunc() { 
    if (x != null) { 
     if (y != null) { 
      return function() { return this.id == xyz && this.x == x && this.y == y; }; 
     } else { 
      return function() { return this.id == xyz && this.x == x; }; 
     } 
    } 
    . 
    . 
    . 
     else { 
     return function() { return this.id == xyz; }; 
    } 
} 

これは私があなたのアイデアを得ることを願っています。

私は、このフィルタ機能を生成するより良い方法があると思います。もし使用できるのであれば、単にすべてのフィルターを使い、設定されているフィルターの条件を単一のreturnステートメントに連結するだけです。すべてのフィルタを完了したら、この文を関数として返し、Azure Mobile Serviceのフィルタ関数として使用します。

答えて

0

実際には、フィルタ関数の本体は、Open Data Protocol(OData)ブール式に変換され、クエリ文字列パラメータに渡されます。しかし、あなたが直接read方法にODataのクエリ文字列を渡すと、以下のようにODataのクエリ文字列を構築することができます。詳細については

var filterStr = "$filter=id eq 'xyz'"; 
if(x) filterStr += " and x eq '" + x + "'"; 
if(y) filterStr += " and y eq '" + y + "'"; 
. 
. 
. 

table.read(encodeURIComponent(filterStr)).then(success, failure); 

を、Execute an OData query operationを参照してください。

+0

ありがとうございました!少しの研究をした後、私は上記のテクニックにも切り替えました。あなたの応答を見て、正しいアプローチだと私に保証しました。 –

関連する問題