2017-08-07 40 views
0

我在Angular Web App中使用Javascipt的Azure移動服務庫。根據這裏的文檔:https://github.com/Azure/azure-mobile-services/blob/master/docs/mobile-services-html-how-to-use-client-library.md#how-to-filter-returned-data如何在查詢Azure移動服務時將過濾器添加到現有過濾器功能

有兩種方法來過濾返回的數據。一個是傳遞一個JSON對象,另一個傳遞一個過濾函數(用於複雜過濾)。我使用過濾函數,因爲我必須使用關係運算符來處理需要大於或小於條件的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移動服務的過濾器函數。

回答

0

實際上,過濾函數的主體被轉換爲傳遞給查詢字符串參數的開放數據協議(OData)布爾表達式。但是,你可以直接傳遞一個OData的查詢字符串的方法read,並如下建立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

感謝您的迴應!在做了一些研究之後,我選擇了切換到所提到的技術。看着你的回覆,向我保證,這是正確的做法。 –

相關問題