Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用FixtureAdapter时,如何使用非“id”字段作为主键?_Javascript_Ember.js_Ember Data - Fatal编程技术网

Javascript 使用FixtureAdapter时,如何使用非“id”字段作为主键?

Javascript 使用FixtureAdapter时,如何使用非“id”字段作为主键?,javascript,ember.js,ember-data,Javascript,Ember.js,Ember Data,我已经开始使用EmberJS和Ember数据,但遇到了一个小问题 我有一个应用程序,其中我的数据源使用非id作为主键,例如/model/。在将其连接到后端之前,我一直在使用来处理事情: App.ApplicationAdapter = DS.FixtureAdapter.extend({}) App.MyModel = DS.Model.extend({ slug: DS.attr('string'), body: DS.attr('string') }); App.MyMo

我已经开始使用EmberJS和Ember数据,但遇到了一个小问题

我有一个应用程序,其中我的数据源使用非id作为主键,例如/model/。在将其连接到后端之前,我一直在使用来处理事情:

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'
}];
似乎有几个信息源解释了如何使用序列化,但它们都是围绕实际数据源工作的,并且涉及修改序列化程序;使用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数据的版本:


我必须回顾fixture适配器/序列化程序,但是在rest适配器/序列化程序中,您可以在序列化程序上定义主键。在应用程序中,它将被称为id,但当它反序列化/序列化时,它将转换为主键名

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

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

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

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