【问题标题】:BreezeJS - binding to all entitiesBreezeJS - 绑定到所有实体
【发布时间】:2014-04-06 20:23:15
【问题描述】:

我的应用基于来自服务器的通知,使用 SignalR 我正在获取实体并使用添加它们

manager.createEntity(entityType, entity, breeze.EntityState.Unchanged);

用户界面基于绑定到特定类型的所有实体的 Angular 网格,但是当我添加新实体时,网格没有被更新,我的假设是我绑定到缓存而不是其他收藏。删除实体时同样的问题

【问题讨论】:

  • 我不知道您是如何绑定到实体列表的,但假设它是父实体的导航属性,它应该在更新该属性时更新,前提是您不使用直接在 UI 中排序(此时绑定可能不会更新),但如果不是这种情况,您是否尝试过创建实体并链接到方法 .entityAspect.acceptChanges() 而不是在状态不变的情况下创建它?
  • 我正在对集合使用 ng-repeat 进行绑定,这就是整个概念。我没有使用导航属性。当我更新其中一个实体的属性时,一切都很好,只是在添加/删除实体时不行。我创建它时状态不变,因为我不希望经理去服务器创建新实体
  • 收藏什么?您可能在某个时间运行了一个查询,结果就是您所绑定的。如果您希望向该集合添加另一个项目,您需要有某种方式来引用该集合,Breeze 很可能对此一无所知。
  • 根据文档和代码 -->getEntities - 此方法可用于获取 EntityManager 中的所有实体
  • 意味着你获得了对包含某种类型实体的真实集合的引用

标签: angularjs breeze


【解决方案1】:

正如@PWKad 在上面的 cmets 中指出的那样,getEntities 函数每次调用时都会构建一个数组,从其缓存中返回与参数匹配的实体。缓存更改时,结果数组不会更新。

在您的情况下,您应该存储 getEntities 返回的数组,然后将每个新实体添加到其中:

scope.gridList = manager.getEntities(entityType);
// ... then later:
scope.gridList.push(manager.createEntity(entityType, entity, breeze.EntityState.Unchanged));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多