3

我正在尝试将固定装置加载到我的具有嵌入式记录的应用程序中。

从服务器加载数据(使用DS.RESTAdapter)有效,但当我尝试通过DS.FixtureAdapter.

楷模:

App.Post = DS.Model.extend
  title: DS.attr('string')
  comments: DS.hasMany('App.Comment')

App.Comment = DS.Model.extend
  text: DS.attr('string')
  # I'm not specifying DS.belongsTo('post') because comments could also exist 
  # with other objects.
  # Anyway, it does not work even with it. 

适配器:

App.Adapter = DS.FixtureAdapter.extend()
App.Adapter.map App.Post,
  comments:
    embedded: 'always'

店铺:

App.store = DS.Store.create
  revision: 11
  adapter: App.Adapter.create()

夹具:

App.Comment.FIXTURES = []

App.Post.FIXTURES = [
  {
    id: "1"
    title: "My post"
    comments: [{
      id: "1"
      text: "My first comment" 
    }, {
      id: "2"
      text: "My second comment"
    }]
  }
]

控制台中:

post = App.store.find(App.Post, 1);

comments = post.get("comments");
console.log(comments.get('length')); // => 1

firstComment = comments.get('firstObject');
console.log(firstComment.get('id')); // => undefined
console.log(firstComment.get('name')); // => TypeError: Cannot call method `hasOwnProperty` of undefined

我认为这个问题与这个问题有关,也许与这个拉取请求有关。

使用的 Ember 版本:

编辑

这是说明问题的 JSFiddle。而且我还在这里写了一个失败的测试

4

1 回答 1

2

嗯,起初我在猜测没有 id 的灯具,但没有。也许

App.Adapter = DS.FixtureAdapter.extend()
App.Adapter.map App.Product,
  groups:
    embedded: 'always' 

还应该包含 App.Post 总是嵌入评论吗?

如果这不能解决这个问题,我怀疑fixture 适配器不能很好地嵌入,你也必须定义注释。

更新:在与@tomdale 讨论后,不会对夹具适配器进行任何更改,以使其能够加载嵌入的记录。所以我能建议的是:

http://jsfiddle.net/4Zqvc/9/

顺便说一句,这正是汤姆所说的:

我不相信夹具适配器支持嵌入式记录是否有充分的理由需要它?它也不支持 underscored_property_names 夹具适配器的想法不是模仿来自服务器的 JSON 有效负载它以 Ember Data 期望的格式提供存根数据,因此不嵌入关系,属性名称是驼峰式等。

于 2013-01-14T11:14:25.503 回答