加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 如何在Ruby on Rails中使用jTable?

发布时间:2020-12-17 03:17:24 所属栏目:百科 来源:网络整理
导读:我想在 Ruby on Rails 4中使用 jTable jQuery插件.最好的方法是什么? Turbolink兼容性对我来说很重要. 解决方法 我将jTable js和css安装到供应商目录中(需要jQuery UI,我使用了 jquery-ui-rails gem) 我创建了一个控制器(称为tables_controller),并使用了一
我想在 Ruby on Rails 4中使用 jTable jQuery插件.最好的方法是什么? Turbolink兼容性对我来说很重要.

解决方法

我将jTable js和css安装到供应商目录中(需要jQuery UI,我使用了 jquery-ui-rails gem)

我创建了一个控制器(称为tables_controller),并使用了一些棘手的方法使其易于使用和导轨友好.

请参阅以下示例.我使用了一种特殊的命名约定来简化过程:字段的名称包含表的名称和用“__”分隔的列名称 – 例如visitor__id.您将看到它如何帮助处理自动排序.

应用程序/控制器/ tables_controller.erb:

class TablesController < ApplicationController
  def demo
    respond_to do |format|
      format.json {
        page_size = params[:jtPageSize].to_i
        start_index = params[:jtStartIndex].to_i
        start_page = start_index / page_size + 1
        sort_by = params[:jtSorting].gsub('__','.')
        filter = params[:filter]
        if filter
          @visitors_count = Visitor.joins(:city).
              where('visitors.name like ? OR cities.name like ?',"%#{filter}%","%#{filter}%").size()
          @visitors = Visitor.joins(:city ).
              where('visitors.name like ? OR cities.name like ?',"%#{filter}%").order(sort_by).
              paginate(:page => start_page,:per_page => page_size)
        else
          @visitors_count = Visitor.all.size()
          @visitors = Visitor.joins(:city).order(sort_by).
              paginate(:page => start_page,:per_page => page_size)
        end
      }
      format.html {}
      format.js {}
    end
  end
  def demo_delete
    @visitor = Visitor.find(params[:visitors__id])
    if @visitor
      if @visitor.destroy
        render js: '{"Result":"OK"}'
      end
    end
  end
end

应用程序/视图/表/ demo.json.jbuilder:

json.Result "OK"
json.TotalRecordCount @visitors_count
json.Records do
  json.array!(@visitors) do |visitor|
    json.visitors__id visitor.id
    json.visitors__name visitor.name
    json.visitors__age visitor.age
    json.cities__name visitor.city.name
  end
end

应用程序/视图/表/ demo.html.erb:

<div class="jtable-filter">
  <form class="jtable-filter">
    <input type="text" name="filter" id="filter"/>
    <button type="submit" data-jtable-filter="demo">Filter</button>
  </form>
</div>
<div id="demo" data-jtable-config="/demo">
</div>

应用程序/视图/表/ demo.js.erb:

var jtable_config = {
    title: '',paging: true,//Enable paging
    pageSize: 10,//Set page size (default: 10)
    sorting: true,//Enable sorting
    defaultSorting: 'visitors__name ASC',//Set default sorting
    defaultDateFormat: 'yy-mm-dd',gotoPageArea: 'combobox',actions: {
        listAction: '/demo',deleteAction: '/demo/delete'
    },fields: {
        visitors__id: {
            key: true,list: false
        },visitors__name: {
            title: 'Name',width: '30%'
        },visitors__age: {
            title: 'Age',width: '20%'
        },cities__name: {
            title: 'City',width: '20%'
        }
    }
};

application.js中:

(function ($) {
    jQuery.fn.jtable_ou = function () {
        return this.each(function () {
            var $this = $(this);
            var config_url=$this.attr("data-jtable-config");
            $.getScript( config_url,function( data,textStatus,jqxhr ) {
                $this.jtable(jtable_config);
                $this.jtable('load');
            });
        });
    };
})(jQuery);

$(document).on("page:change",function() {
    $('[data-jtable-config]').jtable_ou();
    $('button[data-jtable-filter]').click(function (e) {
        e.preventDefault();
        var target=this.getAttribute("data-jtable-filter");
        $('#'+target).jtable('load',{
            filter: $('#filter').val()
        });
    });
});

的Gemfile:

match '/demo',to: 'tables#demo',via: [:get,:post]
match '/demo/delete',to: 'tables#demo_delete',via: [:post]

它是turbolink友好的,使用不引人注目的JavaScript.

你可以找到详细的描述in this post.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读