【问题标题】:Ember: "Map" mismatching api objects (asp.net web api) to ember modelsEmber:“映射”不匹配 api 对象 (asp.net web api) 到 ember 模型
【发布时间】:2016-06-22 18:48:06
【问题描述】:

根据我目前所学到的知识,我知道我必须在序列化程序中做一些事情来解决以下问题,但是有点迷失......

我的 api,返回一个名为 PortfolioSummaryDto 的对象,我的 Ember 模型名为“portfoliolistitem”。

这给了我以下错误(这是有道理的) 在负载中遇到“portfolio_summary_dtos”,但没有找到模型名称“portfolio-summary-dto”的模型(使用 dealview1@serializer:-rest:.modelNameFromPayloadKey("portfolio_summary_dtos") 解析模型名称)

以后我想调用任何 API 调用,其中返回的对象及其名称(和属性名称)与我的 Ember 模型完全不同。

有人可以指点我阅读如何将 api 对象“映射”到 ember 模型吗?

【问题讨论】:

    标签: ember.js asp.net-web-api ember-data


    【解决方案1】:

    ember.js 的一般概念是约定优于配置,因此您必须以特定方式命名 ember.js 模型的属性和名称,才能访问有效负载的底层 JSON 属性。

    PortfolioSummaryDto -> 投资组合摘要-dto

    但是,如果您想自定义此行为,您必须覆盖此约定。

    要覆盖序列化过程,您必须实现自己的 ember.js 序列化程序。假设您不想为每个 ember.js 模型实现单独的序列化程序,那么您可以对模型名称执行以下操作:

    你在app/application/model-mapping.js中创建一个这样的配置文件:

    export default {
      'PortfolioSummaryDto': 'portfoliolistitem',
      /* add more here */
    }
    

    该文件表示从您的模型文件到 ember.js 模型文件的映射。然后您可以通过这种方式创建或自定义您的应用程序序列化程序:

    import DS from 'ember-data';
    import mappingTable from './model-mapping';
    
    export default DS.RESTSerializer.extend({
      modelNameFromPayloadKey(payloadKey) {
        return mappingTable[payloadKey] || payloadKey;
      }
    });
    

    【讨论】:

    • 这很有意义,谢谢!映射属性怎么样(我想我仍然在想“automapper”太多,来自.net/mvc)
    • 请参阅here 了解有关规范化(更改)您从服务器获得的 JSON 响应的信息
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多