breezeJS自定义谓词
我想写一个稍微复杂的查询,所以我想知道是否有办法提供一个自定义函数作为where子句的谓词 例如,如果我们可以做以下事情,那就太好了:breezeJS自定义谓词,breeze,single-page-application,Breeze,Single Page Application,我想写一个稍微复杂的查询,所以我想知道是否有办法提供一个自定义函数作为where子句的谓词 例如,如果我们可以做以下事情,那就太好了: var myArray = [1, 2, 3]; var filter = function (person) { return elementExists(person.id, myArray); }; EntityQuery.from('persons').toType('Person') .where(filter);
var myArray = [1, 2, 3];
var filter = function (person) {
return elementExists(person.id, myArray);
};
EntityQuery.from('persons').toType('Person')
.where(filter);
查看源代码,我意识到在最新版本的BreezeJS中没有这种功能(我可能错了)
我只是想知道breeze是否支持类似的操作。在客户端,您应该能够通过检查返回的长度来确定元素是否存在
var getItems = function (runId, tankId, topicId) {
var localquery = EntityQuery.from("Items")
.using(manager);
var p1 = new breeze.Predicate("runId", "eq", runId);
var p2 = breeze.Predicate("tankId", "eq", window.app.vm.tanks.activetank());
var p3 = breeze.Predicate("topicId", "eq", topicId);
var p4 = breeze.Predicate("topicId", "eq", app.Topics.Growth_Topic);
var pred;
var runId = p1._value;
var tankId = p2._value;
// If the third parameter exists, add it to your complex predicate
// adding a specific Topic to the predicate
// Otherwise only add the General topic
if (p4)
pred = breeze.Predicate.or([p3, p4]);
else
pred = breeze.Predicate.or(p3);
var newpred = breeze.Predicate.and([p1, p2, pred]);
// newpred is now querying for a specific runId and tankId and (p3 or p4) if p4 exists
// otherwise it is querying for runId and tankId or (p3)
// So look in the local metadataStore first
var queryb = localquery.where(newpred);
var results = manager.executeQueryLocally(queryb);
// If we do have it locally use it
if (results.length) {
window.app.vm.Items.Items(results);
}
// otherwise get it from the database
else {
var query = EntityQuery
.from("Items")
.where(newpred);
// return the promise from breeze
return manager.executeQuery(query)
.then(function (data) {
// check to see if the call to the webapi controller returned any data
if (data.length > 0) {
// stick it into the viewmodel it to your viewmodel
window.app.vm.Items.Items(data.results);
return "element exists";
} else {
return "element does not exist";
}
})
.fail(queryFailed);
}
};
这个例子比您要求的要复杂得多,所以请删掉您不想简化查询的部分。我在这里向您展示如何在查询中同时使用“and”和“or”。我还展示了如何检查本地元数据存储,以查看在转到服务器之前该项是否存在
如果该项不存在,并且您希望创建它,请注意线程计时,并在执行导航到另一个页面以显示新项等操作之前,将对象创建包装在承诺中。导航可能比创建功能快,并且新项目可能还没有通过敲除绑定到viewmodel中,因此它可能在新页面上显示为空白。那会让你在相当长的一段时间里发疯