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

この質問はこの質問に関連していると思います。おそらくこのプルリクエストに関連していると思います。

使用した残り火バージョン:

編集

これが問題を説明するJSFiddleですそして、私もここに失敗したテストを書きました。

4

1 に答える 1

2

うーん、最初はIDのないフィクスチャを推測していましたが、違います。多分

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

App.Postもコメントを常に埋め込む必要がありますか?

これでこの問題が解決しない場合は、フィクスチャアダプタが埋め込みでうまく機能しない可能性があります。コメントも定義する必要があります。

更新:@tomdaleとの話し合いの後、埋め込みレコードのロードを機能させるために、フィクスチャアダプターに変更が加えられることはありません。だから私が提案できるのはこれだけです:

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

ところで、これがまさにトムが言ったことです:

フィクスチャアダプタが埋め込みレコードをサポートしているとは思わないのですが、サポートする必要があるのには十分な理由がありますか?また、underscored_property_namesもサポートしていません。フィクスチャアダプタの考え方は、サーバーからのJSONペイロードを模倣することではなく、Ember Dataが期待する形式でスタブデータを提供するため、関係が埋め込まれず、プロパティ名がcamelCasedなどになります。

于 2013-01-14T11:14:25.503 に答える