Breeze.js Passthrough Predicate Odata Url

时间:2014-12-10 15:31:53

标签: breeze predicate predicatebuilder

我正在尝试使用以下链接中的文档创建一个包含多个breeze.js passthrough谓词的odata网址:http://www.getbreezenow.com/documentation/query-using-json

然而,生成的url看起来不像odata url,例如:

var query = breeze.EntityQuery.from('User').using(this.manager).where("{ { 'userName': { '=': '123456' } } }");
var url = query._toUri(this.manager);

网址为"User?$filter=%7B%20%7B%20'userName'%3A%20%7B%20'%3D'%3A%20'123456'%20%7D%20%7D%20%7D&$orderby=UserName"而不是"User?$filter=(UserName eq '123456')&$orderby=UserName"

1 个答案:

答案 0 :(得分:0)

我认为你不想要一个passthru查询,因为这只是通过你的where子句完整无需任何处理。当你引用整个where子句时会发生这种情况。

如果您希望将查询转换为“odata”语法,请尝试以下操作:

var query = breeze.EntityQuery.from('Customers').using(em)
     .where({ 'userName': { '==': '123456' } });

请注意,'where'参数不是引号(它是标准的javascript对象),运算符是'==',而不是'=';

甚至更简单

var query = breeze.EntityQuery.from('Customers').using(em)
     .where( { userName: '123456' });

更多信息:

可以从 任何 breeze查询生成两种形式的网址。 OData表单和JSON表单。如果你想要OData(默认值),那么你要么什么都不做,因为它是默认值,或者你可以明确告诉breeze:

breeze.core.config.initializeAdapterInstance("uriBuilder", "odata");

如果你想要json表单,你可以使用

breeze.core.config.initializeAdapterInstance("uriBuilder", "json");

您也可以添加一行来使用'json'uriBuilder。如果你想要OData网址,只需省略这一行。您仍然可以通过json语法构造查询,但URL将使用OData语法输出。

Json表单(或uri)对非OData服务器很有用。