Breeze 自定义DataService适配器saveChanges方法将实体设置为未更改
我已经为BreezeJS实现了一个定制的DataService适配器——我想将Breeze与RESTful后端服务(而不是OData或ASP.NETWebAPI)一起使用 到目前为止,经过一段学习曲线后,成绩不错 我遇到了一个问题,当我调用savechanges时,客户机上的实体没有被标记为“Unchanged”。它们保持相同的实体状态 我假设这与对后端服务的AJAX请求的成功处理程序有关(查看WebAPI适配器的源代码): 看起来响应包含一个“实体”数组。这些“实体”看起来像什么?它使用更新的entityAspect.entityState值(服务器响应为“未更改”)响应客户端发送的内容Breeze 自定义DataService适配器saveChanges方法将实体设置为未更改,breeze,Breeze,我已经为BreezeJS实现了一个定制的DataService适配器——我想将Breeze与RESTful后端服务(而不是OData或ASP.NETWebAPI)一起使用 到目前为止,经过一段学习曲线后,成绩不错 我遇到了一个问题,当我调用savechanges时,客户机上的实体没有被标记为“Unchanged”。它们保持相同的实体状态 我假设这与对后端服务的AJAX请求的成功处理程序有关(查看WebAPI适配器的源代码): 看起来响应包含一个“实体”数组。这些“实体”看起来像什么?它使用更新的
这就是应该传递到延迟的
调用中的内容。解决调用吗?我有一个有效的解决方案
简而言之,以下是传递给
deferred.resolve(saveResult);
调用savechangeajax请求的成功处理程序
- 服务器响应应包括有关如何从客户端生成的id映射到服务器生成的id(如果服务器生成了id)的信息。这可以是响应中返回的一个
keyMapping
属性(就像Breeze API控制器一样),也可以是我的服务将keyMapping
属性作为特定资源的子属性返回
- 客户机代码应创建一个对象数组,如下所示:
{entityTypeName:“完全限定实体类型名称”,
tempValue:“客户端生成的id”,
realValue:“服务器生成的id”
}
- 此数组是
saveResult
对象的keyMappings属性
saveResult
对象的entities
属性是从服务器修改的所有实体的平面列表。由于我的服务API的设计,它可以返回一个实体,以及嵌入其中的子实体,我必须遍历这些实体并将其拉出到一个平面列表中。此外,这些实体对象应该是“原始”的,不包括entityAspect属性或Breeze可能解释为“真实”实体的任何内容
此外,还有一点也很有帮助,那就是查看来自Breeze的新样本。他们已经实现了一个定制的
dataServiceAdapter
,用于连接他们的NodeJS/MongoDB后端。这也提供了一些额外的见解
祝你好运 我有一个有效的解决方案 简而言之,以下是传递给
deferred.resolve(saveResult);
调用savechangeajax请求的成功处理程序
- 服务器响应应包括有关如何从客户端生成的id映射到服务器生成的id(如果服务器生成了id)的信息。这可以是响应中返回的一个
属性(就像Breeze API控制器一样),也可以是我的服务将keyMapping
属性作为特定资源的子属性返回keyMapping
- 客户机代码应创建一个对象数组,如下所示: {entityTypeName:“完全限定实体类型名称”, tempValue:“客户端生成的id”, realValue:“服务器生成的id” }
- 此数组是
对象的keyMappings属性saveResult
对象的saveResult
属性是从服务器修改的所有实体的平面列表。由于我的服务API的设计,它可以返回一个实体,以及嵌入其中的子实体,我必须遍历这些实体并将其拉出到一个平面列表中。此外,这些实体对象应该是“原始”的,不包括entityAspect属性或Breeze可能解释为“真实”实体的任何内容entities
祝你好运 这不是一个简单的答案。我在建造,所以这周我不能去。希望有人能比我抢先一步。下周还有什么更新吗?谢谢你的帮助!这不是一个简单的答案。我在建造,所以这周我不能去。希望有人能比我抢先一步。下周还有什么更新吗?谢谢你的帮助!