0

我的模型定义如下:

App.User = DS.Model.extend({
  primaryKey: 'username',
  username: DS.attr('string'),
  name: DS.attr('string')
});

我的自定义适配器地图:

DS.SocketAdapter.map('App.User', {
  primaryKey: 'username',
  username: DS.attr('string'),
});

我正在通过在控制台上输入来测试这个模型:

App.User.createRecord({username:"user_1"});
var r = App.User.find("user_1");
console.log( r.serialize() );

>> Object {username: null, name: null ..... all null}

但它返回一个“空”对象。还测试了:

App.User.find({username:"user_1"});

但这是在做一个远程请求。我读到 Ember Data 确实允许您通过 ID 以外的属性查找记录。

那么我在告诉 Ember 数据我的自定义 primaryKey时做错了什么?

4

1 回答 1

0

我认为您的问题在于您定义username了两次。如果您username通过适配器从 json 映射到模型的 primaryKey,那么您应该避免在我猜的模型上做同样的事情。有不同的方法来定义映射,但适配器是最合适的地方在您的情况下,请参阅此处了解更多详细信息:https ://github.com/emberjs/data/blob/master/BREAKING_CHANGES.md#mapping

像这样更改您的代码,它应该可以工作:

// Model
App.User = DS.Model.extend({
  name: DS.attr('string')
});

// Adapter
DS.SocketAdapter.map('App.User', {
  primaryKey: 'username'
});

现在尝试创建新记录

App.User.createRecord({username:"user_1", name:"foo"});

然后像你已经做的那样通过它的 id 找到记录:

var r = App.User.find("user_1");

这个

console.log( r.serialize() );

那么至少应该给你:

>> Object {name: "foo" ...}

希望能帮助到你

于 2013-05-06T14:55:36.603 回答