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の中身をロールバックできないので、どうしたものかとか思案中・・・・。