我已经开始使用EmberJS和Ember-Data,但我遇到了一个小问题。
我有一个应用程序,我的数据源使用非id作为主键(例如/model/<slug_name>
)。我使用FixtureAdapter
来处理事情,直到我将其连接到后端:
App.ApplicationAdapter = DS.FixtureAdapter.extend({})
App.MyModel = DS.Model.extend({
slug: DS.attr('string'),
body: DS.attr('string')
});
App.MyModel.FIXTURES = [{
slug: 'test-slug',
body: 'Body goes here'
}];
似乎有几种信息来源可以解释如何使用different primary key,但它们都是围绕使用实际数据源(并涉及修改序列化程序;使用FixtureAdapter
时未使用的内容。
如果我做了天真的事情,只是连线路线......
// ...
App.MyModelEditRoute = Ember.Route.extend({
model: function(params) {
return this.store.find('mymodel', params.slug)
}
});
...并更改模板......
{{#link-to "mymodel.edit" slug}}Edit{{/link-to}}
...然后我收到了这个错误:
Assertion failed: You made a request for a mymodel with id test-slug, but the adapter's response did not have any data
在使用FixtureAdapter
时,如何使用非'''字段作为主键?
理想情况下,是否有使用FixtureAdapter
或真实数据源的解决方案?
作为参考,这些是我正在使用的EmberJS和Ember-Data的版本:
"ember": "~1.3.2",
"ember-data": "~1.0.0-beta.8"
答案 0 :(得分:0)
我将不得不回顾灯具适配器/串行器,但在其余的适配器/串行器中,您可以在串行器上定义主键。在应用程序中,它只是被称为id
,但是当它反序列化/序列化时,它会将其转换为主键名称
App.ColorSerializer = DS.RESTSerializer.extend({
primaryKey: 'piano'
});
App.Color = DS.Model.extend({
color: DS.attr()
});