2017-08-07 52 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

感谢您的回应!在做了一些研究之后,我选择了切换到所提到的技术。看着你的回复,向我保证,这是正确的做法。 –

相关问题