我对BreezeJS很新,我做错了什么,但不确定是什么。我正在为我的GET请求使用第三方API,并使用我自己的服务器后端来处理SaveChanges以单独向第三方发出每个请求,因为我无法将发布/置位请求自定义为确切的语法和发布数据格式我需要。
我们的模型是动态的(意味着客户可以添加新的属性/字段,然后从其余的api流向我们的客户端),这就是为什么代码看起来像下面那样,这是控制器:
[HttpPost]
public SaveResult SaveChanges(JObject saveBundle)
{
var context = JsonConvert.DeserializeObject<List<dynamic>>(saveBundle.SelectToken("entities").ToString());
foreach (var entity in context)
{
foreach (JProperty obj in entity)
{
if (obj != null)
{
// nothing right now but in future persist somehow
}
}
}
// Construct the save result to inform the client that the server has completed the save operation
var keyMappings = new List<KeyMapping>();
return new SaveResult()
{
Entities = context.Cast<object>().ToList(),
Errors = null,
KeyMappings = keyMappings
};
}
调用堆栈如下所示:
TypeError: undefined is not a function
at http://localhost:5749/Scripts/breeze.debug.js:14114:51
at http://localhost:5749/Scripts/breeze.debug.js:235:26
at Array.map (native)
at __map (http://localhost:5749/Scripts/breeze.debug.js:234:15)
at proto.visitAndMerge (http://localhost:5749/Scripts/breeze.debug.js:14111:16)
at http://localhost:5749/Scripts/breeze.debug.js:12806:48
at __using (http://localhost:5749/Scripts/breeze.debug.js:395:16)
at Object.processSavedEntities (http://localhost:5749/Scripts/breeze.debug.js:12794:13)
at saveSuccess (http://localhost:5749/Scripts/breeze.debug.js:12776:67)
at deferred.promise.then.wrappedCallback (http://localhost:5749/Scripts/angular.js:11046:81) undefined
我将它追溯到proto.visitAndMerge中的这一行(breeze.debug.js中的第14114行): if(node.entityAspect.entityState.isDeleted()){
如果你认为我做了一些愚蠢的话,那我也都是耳朵。可以修改第三方API以相应地执行GET,但是没有什么可以处理SaveChanges包,所以据我所知这是我需要做的。
任何建议都会很棒。
作为参考,我试图遵循这种模式:Breezejs SaveChanges: is it possible to return a custom SaveResult object, somehow?
答案 0 :(得分:2)
我明白了。 entityAspect随请求一起发送。因此,将其转换为动态对象会创建一个entityAspect属性,然后我将其发送回客户端。需要删除此entityAspect,以便它不会干扰JavaScript对象。
这是一些代码,也许有一天会帮助某人:
var entities = JsonConvert.DeserializeObject<List<dynamic>>(saveBundle.SelectToken("entities").ToString());
foreach (var entity in entities)
{
JObject objEntityAspect = entity["entityAspect"];
JToken objEntityState = objEntityAspect["entityState"];
if (objEntityState.Value<string>() == "Modified")
{
// make a post with the instance id
}
entity.Remove("entityAspect");
}
entity.Remove("entityAspect")
是所需的关键组件。