0

Ember Data 1.0 ベータ版を使用しています。

次のように定義されたモデルがあります。

App.Artist = DS.Model.extend({
  first_name: DS.attr('string'),
  last_name: DS.attr('string'),
  practices: DS.hasMany('practice')
});

そして、api/artists でモデルをフェッチすると、コレクションが取得され、各アーティストのペイロードには、ID の配列を持つ「practices」属性が含まれます。

{
    "artists": [
        {
            "id": 2,
            "first_name": "An",
            "last_name": "Artist",
            "practices": [
                1,
                2
            ]
        },
    ]
}

ここまでは順調ですね。Ember マジックが発生し、「App.Artist」のインスタンスの「practices」プロパティに問題なくアクセスできます。

ここで、アーティストを作成すると、サーバーは次のペイロードを返します。

{
    "artist": {
        "id": 38,
        "first_name": "New",
        "last_name": "Artist",
        "practices": [
            4
        ]
    }
}

モデルが新しい ID で更新されます。ただし、「プラクティス」にアクセスすると、関連するモデル インスタンスではなく、生の配列値が取得されます。

では、関係を持つレコードを作成した後、関連するオブジェクトをインスタンスに手動で追加し直す必要がありますか? または、モデルをトリガーしてリレーションを再同期できますか?

洞察を事前にありがとう!

アップデート:

保存操作の完了後にモデルがデシリアライズされていないため、関係が失われているようです。モデルをストアに戻すことができます。これにより、データが逆シリアル化されます。

したがって、上記のコードに従って、 App.Artist のインスタンスがあるartist場合

artist.get('store').push('artist', artist.get('data')); 

関係が利用可能になります。ただし、これが「正しい」かどうかはまだわかりません。

4

1 に答える 1

1

これは確かにバグであり、修正中です。コミットを実行した後、リレーションは自動的に維持される必要があります。

https://github.com/emberjs/data/issues/1214

于 2013-09-04T19:30:39.170 に答える