我怎样才能使用非' id'使用FixtureAdapter时,字段是主键吗?

时间:2014-07-04 15:43:07

标签: javascript ember.js ember-data

我已经开始使用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" 

1 个答案:

答案 0 :(得分:0)

我将不得不回顾灯具适配器/串行器,但在其余的适配器/串行器中,您可以在串行器上定义主键。在应用程序中,它只是被称为id,但是当它反序列化/序列化时,它会将其转换为主键名称

App.ColorSerializer = DS.RESTSerializer.extend({
  primaryKey: 'piano'
});

App.Color = DS.Model.extend({
    color: DS.attr()
});

示例:http://emberjs.jsbin.com/OxIDiVU/774/edit