2012-09-27 131 views
12

我有這樣的灰燼數據:在一個請求保存與關聯模型

App.Foo = DS.Model.extend 
    bar: DS.belongsTo("App.Bar", embedded: true) 

App.Bar = DS.Model.extend 
    primaryKey: "blah" 
    blah: DS.attr "string 

一個關係的兩個餘燼車型如果我創建並保存這樣一個新的紀錄:

foo = App.store.createRecord App.Foo 
foo.set "bar", App.Bar.createRecord(blah: "blahblah") 
App.store.commit() 

我看到2個POST請求到服務器:

URL: /foos 
Payload: {"foo":{"bar":null}} 

URL: /bars 
Payload: {"bar":{"blah":"blahblah"}} 

的關聯嵌入,所以我想看看:

URL: /foos 
Payload: {"foo":{"bar":{"blah":"blahblah"}}} 

我可以用餘燼數據REST適配器實現這個還是我需要寫我自己的代碼來做到這一點?

回答

2

我正在觀察我的應用程序中的相同行爲。 將'embedded'設置爲true只能幫助您獲取嵌入數據,但在發佈時會生成單獨的請求。 如果你想在一個請求中實現它,你已經編寫了你的​​代碼。

+1

Ember-data當前不支持通過嵌入式關聯提交更改。 'DS.Store.commit()'邏輯可以修改爲反思關聯和使用嵌入數據,但是也需要修改'createRecord','updateRecord'和'deleteRecord'(及其批量提交的複數)正確更新關聯對象的狀態。 – Mars

1

這不是直接回答你的問題,但是我發現通過試圖一次保存多個模型來「戰勝」Ember的設計讓我走下了一條可怕的道路。

這是很容易和更可靠的添加所需的屬性新BarFoo,然後創建並返回新對象在服務器上,像這樣:

App.Foo = DS.Model.extend({ 
    blah: DS.attr('string'), 
    barName: DS.attr('string'), 
    bar: DS.belongsTo('bar') 
}) 

this.store.createRecord('foo', { blah: "stuff", barName: "foo" }).save() 

# => POST /foos 

Request: 
{ foo: { blah: "stuff", bar_name: "boo" } } 

Response: 
{ foo: { id: 1, blah: "stuff", bar: { id: 1, name: "boo" } } } 

是的,你結束了一個未使用的屬性Foo,但你爲自己節省了很多代碼。