【问题标题】:breezejs: calling savecChanges for a classic ODATA service fails微风js:为经典 ODATA 服务调用 savecChanges 失败
【发布时间】:2014-06-05 19:08:20
【问题描述】:

我正在尝试保存使用经典 WEBAPI ODATA 服务加载的实体。

当在客户端调用 saveChanges 时,会找到修改后的实体,然后代码进入“createChangeRequests”,并且由于 entityState 被修改,它进入了函数:

 function updateDeleteMergeRequest(request, aspect, prefix) {
    var extraMetadata = aspect.extraMetadata;
    var uri = extraMetadata.uri;
    if (__stringStartsWith(uri, prefix)) {
        uri = uri.substring(prefix.length);
    }
    request.requestUri = uri;
    if (extraMetadata.etag) {
        request.headers["If-Match"] = extraMetadata.etag;
    }
}

但是它在第二行引发异常,因为 extraMetadata 为空。这应该来自哪里? 'aspect' 上甚至不存在属性 extraMetadata ......

breeze 确实有我的模型的元数据,因为我可以加载实体。只是我无法保存。

【问题讨论】:

    标签: javascript breeze


    【解决方案1】:

    第 13318 行(breeze.debug.js):

        function mergeEntity(node, mappingContext, meta) {
          node._$meta = meta;
          meta.extra = node.__metadata;//added
          var em = mappingContext.entityManager;
    

    【讨论】:

    • 这是一个错误修复吗?是否会发布到下一个版本?
    【解决方案2】:

    我刚刚偶然发现了 Breeze 1.4.13 的相同问题。我通过在第 14396 行添加 meta.extraMetadata = node.__metadata 解决了这个问题

    function mergeEntity(mc, node, meta) {
        node._$meta = meta;
        meta.extraMetadata = node.__metadata;
        var em = mc.entityManager;
    

    【讨论】:

    • 这并不是真正“解决”任何 IMO 问题。消除异常并不能解决根本原因,即缺少“额外的元数据”,我们不知道为什么。我们必须找出原因。当我们知道原因时——也许 Web API 没有发送“__metadata”属性——我们可以确定正确的行动方案。我正在调查。
    • 查看相关的 SO 问题:stackoverflow.com/questions/24782426/…
    • 好吧,我对微风很陌生,但据我了解,元对象缺少节点已经拥有的额外元数据。我不知道应该如何将 extraMetadata 提供给元对象,但据我所知,sharepoint-adapter 需要它来为 sharepoint 创建所需的 http-body。
    猜你喜欢
    • 2013-09-01
    • 2015-08-16
    • 1970-01-01
    • 1970-01-01
    • 2013-08-04
    • 1970-01-01
    • 1970-01-01
    • 2015-01-28
    • 1970-01-01
    相关资源
    最近更新 更多