我有一个包含以下字段的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
与某些内部属性冲突。我有几个问题:
[更新]
名称冲突与控制器有关,而与模型无关。它不是一个明确的列表,但要注意其他常见的数据库列名,如:
我认为Ember开发人员并不像这个可怜的pythonist那样害怕与命名空间相关的错误。
BTW,Angular.js伙伴们做对了:他们总是用$
为API属性和方法添加前缀,有效地防止了这种错误。
答案 0 :(得分:4)
我正在尝试回答你的两个问题:
<强> 1 强>
您可以为所有键定义映射,这里是content
属性
App.Adapter.map('App.Post', {
myContent: {key: 'content'}
});
<强> 2 强>
据我所知,在ember中没有这样的explicit
保留名称列表,但根据经验,应该避免使用content
等非常通用的名称(预防性)
希望有所帮助
答案 1 :(得分: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(),
)};
答案 2 :(得分:0)
在尝试访问每个助手的把手时,我遇到了一个类似于名为'namespace'的模型属性的问题。 我通过在模型的RestSerializer上设置attrs属性,在ember-cli 0.1.15中解决了这个问题。所以,对于上述内容:
// 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