ExtJSとRailsの連携
の方法をいろいろ試しているが、今のところ良さそうなのは
Ext.data.proxy.Rest を拡張してRails用のProxyを作成
Ext.define 'hoge.util.RailsProxy', { extend: 'Ext.data.proxy.Rest' alias: 'proxy.rails' format: 'json' reader: type: 'json' root: 'data' totalProperty: 'total' successProperty: 'success' writer: type: 'json' }
モデルに1を持たせる。
Ext.define 'hoge.model.User', { extend: 'Ext.data.Model' fields: [ {name: 'id', type: 'int', convert: (v, r)-> v or null} {name: 'name'} {name: 'email'} ] proxy: type: 'rails' url: "/users" }
ここでidにはconvertを定義しておく。そうしないとデータを新規登録する際にid=0が設定されてしまい、 /users/0.json?.....なURLにPOSTされてしまう。
登録や更新、削除はControllerのメソッド内でStoreのsyncする。
Ext.define 'hoge.controller.Users', { extend: 'Ext.app.Controller' .... onSaveButtonClick: (button)-> record = @getForm().getRecord() or Ext.ModelManager.create({}, 'hoge.model.User') record.set form.getValues() @getUsersStore().add record @getUsersStore().sync() onDeleteButtonClick: (button)-> form = @getForm().getRecord() @getCustomersStore().remove(form.getRecord()) @getCustomersStore().sync()
ただ、上記の実装だと、サーバ側でエラーが発生した場合にどうするかStoreの中身をロールバックできないので、どうしたものかとか思案中・・・・。