实体在ui-router resolve和控制器之间以某种方式分离

时间:2015-05-22 18:03:36

标签: breeze

我正在尝试拒绝对新添加的实体进行更改(期望微风将entityState设置为分离)。大多数时候它都可以工作,但偶尔(大部分在我已经执行了一个实体创建和拒绝之后),rejectChanges调用将失败,因为对entityAspect.entityManager属性有一个空引用。

我通过抽象父状态的ui-router“解析”我的实体实例。然后在抽象父控制器中,我将该实例分配给$ scope。从那时起,我处理$ scope.myEntity而不是我的构造函数中的已解析变量。当我调用实体时这是我的解析函数:

 resolve:{
    myEntity:function(sharedEntityManager,$stateParams, $q){
      return  $q.when(sharedEntityManager.getMyEntity($stateParams.entityId))
        .then(function(myEntity){
          if(!myEntity && myEntity.entityAspect.entityState.isDetached()){
            $q.reject();
          }
          else
          {
            return myEntity;
          }
        });
    }
  }

然后在我的父抽象控制器中,我称之为:

$scope.myEntity = myEntity;

我得到的错误显示为null entityManager ...

TypeError: Cannot read property 'isRejectingChanges' of null
at __using (breeze.debug.js:449)
at EntityAspect.proto.rejectChanges (breeze.debug.js:3687)

只有在我成功完成创建实体的1个循环,拒绝该实体后,才会出现错误。然后,当我创建另一个新实体时,该新实体以某种方式从“已添加”并具有entityManager,到“Detached”和null entityManager。我确认在resolve函数中,entityState是“Added”,但在控制器构造函数中,来自ui-router的注入实体现在是“Detached”。

任何熟悉此行为的人都有解决方法吗?

1 个答案:

答案 0 :(得分:0)

您确定then功能中的测试吗?这对我来说似乎不对。你的意思是if(!myEntity && ...还是if(!myEntity || ...)