Railsã®JSONãExtJS4ã®Ext.grid.panelã§èªã¿è¾¼ã
Railsã«ExtJS4ãä¹ãã¦ã¿ã¦ãã¡ãã£ã¨ã¯ã¾ã£ããã¨ãã¡ã¢ã
Railså´
Userã¢ãã«ã«ãnameã¨ageãæããã¦ãã¨ããã
ããã¦ãUserãJSONã§å
¨ä»¶è¿ãã³ã³ããã¼ã©ãä½æããã¨ããã
class TweetsController < ApplicationController def index @users = User.all respond_to do |format| format.html # index.html.erb format.xml { render :xml => @users } format.json { render :json => @users } end end end
http://localhost:3000/users.jsonã®ãããªæãã§ã¢ã¯ã»ã¹ããã¨ä¸è¨ã®JSONãè¿ã£ã¦ããã
[ {"user":{"name":"_ryog","created_at":"2011-07-28T08:33:01Z","id":1,"updated_at":"2011-07-28T08:33:01Z","age":"24"}}, {"user":{"name":"mr_k_o","created_at":"2011-07-28T08:36:33Z","id":2,"updated_at":"2011-07-28T08:36:33Z","age":"30"}} ]
ExtJSå´
Ext.grid.Panelã«Ext.data.Storeãè¨å®ãã¦ãä¸è¨ã®JSONã表示ãããããã ãã©ããããªæãã§ãããããªã¨æã£ããã ãã ã£ãã
Panel
Ext.define('Sample.view.User' ,{ extend: 'Ext.grid.Panel', alias : 'widget.users', title : 'ã¦ã¼ã¶ä¸è¦§', store: 'Users', initComponent: function() { this.columns = [ {header: 'åå', dataIndex: 'name', flex: 1}, {header: 'å¹´é½¢', dataIndex: 'age', flex: 1} ]; this.callParent(arguments); } });
Model
Ext.define('Sample.model.User', { extend: 'Ext.data.Model', fields: ['name', 'age'] });
Store
Ext.define('Sample.store.Users', { extend: 'Ext.data.Store', model: 'Sample.model.User', autoLoad: true, proxy: { type: 'ajax', api: { read: 'http://localhost:3000/users.json' }, reader: { type: 'json', root: '', successProperty: 'success' } } });
readerã®typeã«jsonã¨ãããããããããã¯ã©ã¹ãããã®ãã¨æã£ã¦æ¢ãã¦ã¿ãããExt.data.reader.Jsonããã£ãã
ドキュメントèªãã§ã¿ãããrecordãè¨å®ããã¨ã
Store
Ext.define('Sample.store.Users', { extend: 'Ext.data.Store', model: 'Sample.model.User', autoLoad: true, proxy: { type: 'ajax', api: { read: 'http://localhost:3000/users.json' }, reader: { type: 'json', root: '', record: 'user', successProperty: 'success' } } });
ã§ã¾ããããããã¼ããã£ããã
追è¨
こんなサンプルコードãæ¸ãã¦ã人ãããã
ç´ æ´ãããã