微风新手 – 我有一个轻松的实体,它具有一对多关系中的数组导航属性.我想检查父实体是否在导航属性中存在任何相关的子实体.这个子数组还没有扩展,我想懒得加载检查.
由于负载是异步发生的,似乎检查可能无法加载
(如果entity.children()…).
如果我把检查放在“then”回调中,似乎我会遇到同样的问题.有没有办法同步加载子数组,以便我可以检查并返回是否填充?或者有更好的方法吗?
function doChildrenExist (entity) {
var childrenExist = false;
entity.entityAspect.loadNavigationProperty("children")
.then(function () {})
.fail(function () {});
if(entity.children() !== null || entity.children().length > 0) {
childrenExist = true;
}
return childrenExist;
}
解决方法:
之所以没有返回您现在想要的是因为您在异步查询完成之前返回了childrenExist.将函数放在.then()中将捕获回调,并且只有在检索到数据后才返回IT’S回调,除非它失败,在这种情况下我们可以返回错误或只是’false’.
function doChildrenExist (entity) {
var childrenExist = false;
entity.entityAspect.loadNavigationProperty("children")
.then(function () {
if(entity.children().length > 0) {
childrenExist = true;
}
return childrenExist; })
.fail(catchError);
function catchError(e) {
alert(e.message);
return false;
}
}
为了节省几个字节的代码你也应该能够做到这一点 –
function doChildrenExist (entity) {
// No need to define a variable since we are either returning true or false
entity.entityAspect.loadNavigationProperty("children")
.then(function () {
if(entity.children().length > 0) {
return true;
}
return false; })
.fail(catchError);
function catchError(e) {
alert(e.message);
return false;
}
}
并在你的函数中调用doChildrenExist –
var showChildren = ko.observable(false); // Do something like hide children until they exist
function refresh(entity) {
doChildrenExist(entity)
.then(checkResult)
}
function checkResult(result) {
showChildren(result);
}