Ember.js模型中的保留属性名称

x33g5p2x  于 2022-11-05  发布在  其他
关注(0)|答案(3)|浏览(143)

我有一个包含以下字段的Post模型:

BlogApp.Post = DS.Model.extend({
    author: DS.attr('string'),
    title: DS.attr('string'),
    preamble: DS.attr('string'),
    content: DS.attr('string'),
    created: DS.attr('date'),
    comments: DS.hasMany('BlogApp.Comment'),
    lastUpdate: DS.attr('date')
});

渲染后,结果将与Post.内容类似:

<BlogApp.Post:ember272:1>

其他字段渲染正常。我猜content与某些内部属性冲突。我有几个问题:
1.当RESTAPI的名称与Ember内部冲突时,有什么解决方法吗?
1.是否还有其他我应该注意的禁用属性名称?
[更新]
名称冲突是与控制器冲突,而不是与模型冲突。这不是一个确定的列表,但要注意其他常见的数据库列名,如:

  • 模型化
  • 交易事项
  • 是新的(_N)
  • 已删除(_D)
  • 贮藏
  • 错误数

我猜Ember开发者不像这个可怜的Python开发者那样害怕与命名空间相关的错误。
顺便说一句,Angular.js的人说对了:它们总是在API属性和方法前面加上$,从而有效地防止了这种错误。

ff29svar

ff29svar1#

我试着回答你的两个问题:

1您可以为所有键定义Map,此处是content属性的示例

App.Adapter.map('App.Post', {
  myContent: {key: 'content'}
});

2据我所知,在ember中没有这样的explicit保留名称列表,但根据经验,应该避免使用content这样的通用名称(预防性地)

希望能有所帮助

xyhw6mcr

xyhw6mcr2#

我遇到了同样的问题,上面的解决方案对我不起作用。我使用ember 1.5和ember-data 1.0.0-beta.7+canary,我通过以下操作解决了这个问题:

//store.js

LS.SERIALIZATION_KEY_MAPPINGS = {
  'body': 'content'
};

LS.ApplicationSerializer = DS.ActiveModelSerializer.extend({
  keyForAttribute: function(attr) {
    if (LS.SERIALIZATION_KEY_MAPPINGS.hasOwnProperty(attr)) {
      return LS.SERIALIZATION_KEY_MAPPINGS[attr];
    } else {
      return this._super(attr);
    }
  }
});

LS.ApplicationAdapter = DS.ActiveModelAdapter.extend({
  namespace: 'api/v1'
});

//models/learning_object.js
LS.LearningObject = DS.Model.extend({
  name: DS.attr(),
  body: DS.attr(),
)};
ukxgm1gy

ukxgm1gy3#

当我试图访问一个名为“namespace”的模型属性时,遇到了类似的问题。我在ember-cli 0.1.15中通过在模型的RestSerializer上设置attrs属性解决了这个问题。因此,对于上面的代码:

// file: app/serializers/post.js

export default DS.RESTSerializer.extend({
  attrs: {
    body: 'content'
  }
});

其中,“body”位于模型中,“content”位于REST服务器有效负载中。
有关详细信息,请访问http://emberjs.com/api/data/classes/DS.RESTSerializer.html#property_attrs

相关问题