代码之家  ›  专栏  ›  技术社区  ›  WhilseySoon

EmberJS不填充camelCased属性

  •  1
  • WhilseySoon  · 技术社区  · 8 年前

    由于某些原因,EmberJS不填充用camelCase编写的模型属性。我使用JSONAPIAdapter(RESTAdapter不是一个选项)。 这是我的模型:

    import DS from 'ember-data';
    export default DS.Model.extend({
        shortName: DS.attr('string'),
        fullName: DS.attr('string'),
        inn: DS.attr('string'),
        kpp: DS.attr('string'),
        checkingAccount: DS.attr('string'),
        correspodentAccount: DS.attr('string'),
        bik: DS.attr('string'),
    });
    

    我的车把模板:

    {{#each model as |company|}}
            <tr class="companies-list__item">
                <td class="companies-list__property">{{company.shortName}}</td>
                <td class="companies-list__property">{{company.inn}}</td>
                <td class="companies-list__property">{{company.kpp}}</td>
                <td class="companies-list__property">{{company.checkingAccount}}</td>
                <td class="companies-list__property">{{company.correspodentAccount}}</td>
                <td class="companies-list__property">{{company.bik}}</td>
            </tr>
    {{/each}}
    

    来自服务器的答案如下所示:

    {
       type: 'company',
       id: 4,
       attributes: {
              shortName: 'Рога и копыта',
              fullName: 'ООО Рога и копыта',
              inn: '312312312',
              kpp: '767675572',
              checkingAccount: '3123145124',
              correspodentAccount: '6547598',
              bik: '76979356'
       },
     },
    

    它确实填充 酒店,kpp,比克 ,但它不使用其他。有什么问题吗?

    2 回复  |  直到 8 年前
        1
  •  4
  •   pixelhandler    8 年前

    当使用JSONAPIAdapter/Serializer时,我认为JSON负载中属性的默认值是dasherized(kabob情况)。看见 https://guides.emberjs.com/v2.10.0/models/customizing-serializers/ 您可能需要进行一些自定义。

        2
  •  1
  •   michael villander    8 年前

    余烬js依赖于命名约定,它期望多个单词驼峰大小写(例如firstName)模型属性映射到JSON响应上的多个单词下划线分隔的小写属性(例如first_name)。如果您的JSON为您提供了名,或者在您不控制后端API的情况下,您可以选择定义一个映射,告诉适配器在JSON响应中查找特定键,并将其映射到给定模型中的属性。

    你可以这样做:

    DS.RESTAdapter.map('App.User', { 
        shortName: { key: 'shortName' },
        fullName: { key: 'fullName' }
    });