2

我有一个包含以下字段的 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.content,结果如下:

<BlogApp.Post:ember272:1>

其他字段渲染正常。我想content这与某些内部属性相冲突。我有几个问题:

  1. 当 REST API 的名称与 Ember 内部冲突时,是否有任何解决方法?
  2. 还有其他我应该注意的禁止属性名称吗?

[更新]

名称冲突与控制器有关,而不是与模型冲突。它不是一个明确的列表,但请注意其他常见的数据库列名称,例如:

  • 模型
  • 交易
  • 是新的
  • is_deleted
  • 店铺
  • 错误

我猜 Ember 开发人员不像这个可怜的 pythonist 那样害怕命名空间相关的错误。

顺便说一句,Angular.js 的人说得对:他们总是为 API 属性和方法添加前缀,$从而有效地防止这种错误。

4

3 回答 3

4

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

1 你可以为所有的键定义一个映射,这里是content属性的一个例子

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

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

希望能帮助到你

于 2013-05-13T07:36:58.427 回答
1

我遇到了同样的问题,上述解决方案对我不起作用。我正在使用 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(),
)};
于 2014-04-12T11:23:23.717 回答
0

I had a similar issue with a model property called 'namespace' when trying to access it a handlebars each helper. I solved this in ember-cli 0.1.15 by setting the attrs property on the model's RestSerializer. So, for the above:

// file: app/serializers/post.js

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

where 'body' is in your model and 'content' in the REST server payload.

For more, see http://emberjs.com/api/data/classes/DS.RESTSerializer.html#property_attrs

于 2015-03-05T15:48:08.260 回答