rails集成extjs

rails集成extjs


原文见:http://extjs.com/tutorial/using-ext-grid-ruby-rails
E文好的就直接看吧。

  1. 下载extjs,将需要的文件放到对应的文件夹(具体需要的文件见第二步的列表)
  2. 在layout中加入javascript引用

    java 代码

    1.         <%= stylesheet_link_tag "../javascripts/ext/resources/css/ext-all.css" %>  
    2.         <%= javascript_include_tag "ext/adapter/prototype/prototype.js" %>  
    3.         <%= javascript_include_tag "ext/adapter/prototype/scriptaculous.js" %>  
    4.         <%= javascript_include_tag "ext/adapter/prototype/effects.js" %>  
    5.         <%= javascript_include_tag "ext/adapter/prototype/ext-prototype-adapter.js" %>  
    6.         <%= javascript_include_tag "ext/ext-all-debug.js" %>  
    7.         <%= yield %>                 

  3. 在view中增加显示grid的div
    java 代码
     
    1. <%= javascript_include_tag "grid-paging.js" %>  
    2. <div id="movies_grid" style="border:5px solid #99bbe8; overflow:hidden; width:650px;"></div>  
4.使用javascript搭建一个grid
url: '/movie/grid_data' 指定了数据源
Ext.grid.Grid('movies_grid'... 则指定了grid出现在哪个div中。

java 代码
 
  1. var grid;  
  2. var ds;  
  3.   
  4. Ext.onReady(function(){  
  5.     init_grid();     
  6. });  
  7.   
  8. function init_grid() {  
  9.     ds = new Ext.data.Store({  
  10.         proxy: new Ext.data.HttpProxy({url: '/movie/grid_data'}),  
  11.           
  12.         reader: new Ext.data.JsonReader({  
  13.             root: 'Movies',  
  14.             totalProperty: 'Total',  
  15.             id: 'id'  
  16.         }, [  
  17.             {name: 'title', mapping: 'title'},  
  18.             {name: 'plot', mapping: 'plot'},  
  19.             {name: 'release_year', mapping: 'date'},  
  20.             {name: 'genre', mapping: 'genre'},  
  21.             {name: 'mpaa', mapping: 'mpaa'},  
  22.             {name: 'directed_by', mapping: 'directed_by'}  
  23.         ]),          
  24.         // turn on remote sorting  
  25.         remoteSort: true      
  26.     });  
  27.   
  28.     var cm = new Ext.grid.ColumnModel  
  29.         ([{  
  30.            id: 'title',  
  31.            header: "Title",  
  32.            dataIndex: 'title',  
  33.            width: 250  
  34.         },{  
  35.            header: "Release Year",  
  36.            dataIndex: 'release_year',  
  37.            width: 75  
  38.         },{    
  39.            header: "MPAA Rating",  
  40.            dataIndex: 'mpaa',  
  41.            width: 75  
  42.         },{    
  43.            header: "Genre",  
  44.            dataIndex: 'genre',  
  45.            width: 100  
  46.         },{    
  47.            header: "Director",  
  48.            dataIndex: 'directed_by',  
  49.            width: 150  
  50.         }]);  
  51.           
  52.     cm.defaultSortable = true;  
  53.   
  54.     grid = new Ext.grid.Grid('movies_grid', {  
  55.         ds: ds,  
  56.         cm: cm,  
  57.         selModel: new Ext.grid.RowSelectionModel({singleSelect:true}),  
  58.         autoExpandColumn: 'title'  
  59.     });  
  60.   
  61.     grid.render();      
  62.     ds.load({params:{start:0, limit:20}});    
  63. }  
 
5.实现服务器端
list方法只是为了显示list.rhtml,其实也可以不写, grid_data才是真正的幕后英雄,注意其中的render方法直接返回text,不使用layout
java 代码
 
  1. class MovieController < ApplicationController  
  2.       
  3.     def list  
  4.     end   
  5.       
  6.     # Called from the list page to get the movie list data to populate the grid.  
  7.     def grid_data  
  8.         start = (params[:start] || 1).to_i        
  9.         size = (params[:limit] || 20).to_i   
  10.         sort_col = (params[:sort] || 'id')  
  11.         sort_dir = (params[:dir] || 'ASC')  
  12.           
  13.         page = ((start/size).to_i)+1  
  14.       
  15.         @movie_pages = Paginator.new(self, Movie.count, size, page)      
  16.   
  17.         @movies = Movie.find(:all,   
  18.                              :select => "id, title, plot, date, genre, mpaa, directed_by",   
  19.                              :limit=>@movie_pages.items_per_page,  
  20.                              :offset=>@movie_pages.current.offset,   
  21.                              :order=>sort_col+' '+sort_dir)  
  22.     
  23.         return_data = Hash.new()        
  24.         return_data[:Total] = @movie_pages.item_count        
  25.         return_data[:Movies] = @movies.collect{|u| {:id=>u.id,   
  26.                                             :title=>u.title,  
  27.                                             :plot=>u.plot,   
  28.                                             :date=>u.date,   
  29.                                             :genre=>u.genre,   
  30.                                             :mpaa=>u.mpaa,   
  31.                                             :directed_by=>u.directed_by} }        
  32.         render :text=>return_data.to_json, :layout=>false  
  33.     end  
  34. end  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值