私は ember.js とソファ DB バックエンドを使用するアプリケーションに取り組んでいます。これまではデータベースドライバーとして ember-resource を使用していましたが、ember-data の方が持続可能と思われるため、ember-data への切り替えを検討しています。
私はcouch DBで作業しているので、Couch DB-Adapterを使用しています。
データベース内のドキュメントには完全なオブジェクト構造が含まれているため、データベース ドライバで埋め込みオブジェクトを指定する必要があります。
しかし、サブオブジェクトを埋め込みとして指定していますが、ember-data はこれらのオブジェクトをメインの json から取得するのではなく、個別のリクエストで取得しているようです。
私のオブジェクト定義は次のとおりです。
App.UserProfile = DS.Model.extend({
type: DS.attr('string'),
fullname: DS.attr('string'),
email: DS.attr('string'),
pictureUrl: DS.attr('string'),
social: DS.hasMany('App.SocialWebAccount', { embedded: true }),
.....
});
App.SocialWebAccount = DS.Model.extend({
profile: DS.belongsTo('CaiMan.UserProfile'),
site: DS.attr('string'),
account: DS.attr('string'),
.....
});
サーバーデータは次のようなものです。
{
"_id": "thoherr",
"_rev": "55-d4abcb745b42fe61f1a2f3b31c461cce",
"type": "UserProfile",
"fullname": "Thomas Herrmann",
"email": "test@thoherr.de",
"pictureUrl": "",
"social": [
{
"site": "socialFacebook",
"account": "thoherr"
},
{
"site": "socialXing",
"account": "Thomas_Herrmann7"
},
{
"site": "socialEmail",
"account": "test@thoherr.de"
}
]
}
読み込み後、UserProfile にはソーシャル データの ArrayProxy が含まれています。これには 3 つのエントリが入力されていますが、SocialWebAccount のインスタンスではなく、すべて未定義です!
この配列にアクセスしようとすると、ember-data は別のデータベース アクセスを行ってデータを取得しているように見えますが、カウチ DB アダプターが undefined では使用できない _id フィールドにアクセスするため、エラーが発生します....
私は何が欠けていますか?
「埋め込み」フラグは、データが既にjsonにあり、オブジェクトをjsonからインスタンス化できることを示していると思いましたか?
ember-data が埋め込まれたデータを取得しようとするのはなぜですか?
ヒントはありますか?