関連のデータもサーバーに送るには

基本、ここに書いてあるとおり。

http://fits.hatenablog.com/entry/20120225/1330166288

ただし、サーバにrailsを使用している場合は、accepts_nested_attributes_forを使って、PUTしたデータを一度に更新したくなる。 ので、dataのkeyの部分は"_attributes"で終わるようにしたい。

また、データを取り出す際に単にitem.dataから取得するだけだと、関連先に含まれるフィールドに意図しないものが含まれてしまうため、 Rails側でCan't mass-assign protected attributesとなってしまう。

以下のように実装したWriterを使用するといい感じになる(今のところ)

Ext.define "hoge.data.writer.NestedJsonWriter", {
extend : "Ext.data.writer.Json"
alias : "writer.nested"

getRecordData: (record, operation)->
    data = @callParent(arguments)

    if record.associations.length > 0
        record.associations.keys.forEach (key)->
            data["#{key}_attributes"] = []
            assoc = record[key]()
            assoc.data.items.forEach (item)->
                itemData = item.getProxy().getWriter().getRecordData(item)
                data["#{key}_attributes"].push(itemData)

    data
}