【问题标题】:How can I use a non-'id' field as the primary key when working with a FixtureAdapter?使用 FixtureAdapter 时,如何使用非“id”字段作为主键?
【发布时间】:2014-07-04 15:43:07
【问题描述】:

我已经开始使用 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,但它们都以使用实际数据源为导向(并涉及修改序列化程序;这不是' t 在使用 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 时,如何使用非“id”字段作为主键?
理想情况下,在使用FixtureAdapter 或真实数据源时是否有可行的解决方案?

作为参考,这些是我正在使用的 EmberJS 和 Ember-Data 版本:

"ember": "~1.3.2",
"ember-data": "~1.0.0-beta.8" 

【问题讨论】:

    标签: javascript ember.js ember-data


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-14
      • 2010-10-08
      • 2017-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-22
      相关资源
      最近更新 更多