javascript – Breeze – Lazy Load Navigational Property

微风新手 – 我有一个轻松的实体,它具有一对多关系中的数组导航属性.我想检查父实体是否在导航属性中存在任何相关的子实体.这个子数组还没有扩展,我想懒得加载检查.

由于负载是异步发生的,似乎检查可能无法加载
(如果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);
}
上一篇:c# – 我将如何使用带有.net 4.0的实体框架6的breeze


下一篇:javascript – breezejs:为经典的ODATA服务调用savecChanges失败