【问题标题】:select2 plugin and json format rails 3select2 插件和 json 格式 rails 3
【发布时间】:2012-12-03 17:28:12
【问题描述】:

我正在将此 gem 用于自动完成功能:

https://github.com/argerim/select2-rails 和 select2。

这是我的行动:

def autocomplete_subject
   @messages = Message.where(:by_the_system => nil).page(params[:page]).per(params[:page_limit])
    messages = Array.new
    @messages.each do |m|
      element = Hash.new
      element[:id] = m.id
      element[:text] = [m.subject].join(' ')
      messages << element
    end
   results = Hash.new
   results[:results] = messages
   respond_to do |format| 
     format.json { 
      render :json => {
        :results => results,
        :total => @messages.count,
     } 
    }
  end
 end

这是我的javascript:

function messageFormatSelection(message) {
  return message.subject;
}

$("#search_boxes #subject").select2({
        minimumInputLength: 3,
        multiple: true,
        width: "300px;",
        ajax: {
            url: "/admin/messages/autocomplete_subject_nil.json",
            dataType: 'json',
            quietMillis: 100,
            data: function (term, page) { // page is the one-based page number tracked by Select2
                return {
                    subject: term, //search term
                    page_limit: 5, // page size
                    page: page, // page number
                };
            },
            results: function (data, page) {
            var more = (page * 5) < data.total;                
              return {results: data.results, more: more};
            }
        },
        formatSelection: messageFormatSelection // omitted for brevity, see the source of this page
   });

这是我的 json 视图:

{"results":{"results":[{"id":"50b4f5c01d41c811fb000014","text":"Microfunc con id: 50ae41011d41c86ad8000004"},{"id":"50b4f8d31d41c811fb000026","text":"Re: Pedido con id: 50b4f6041d41c811fb000018"},{"id":"50b4fcf61d41c811fb00002e","text":"Pedido con id: 50b4f6041d41c811fb000018"},{"id":"50b4fe531d41c811fb000032","text":"Re: Pedido con id: 50b4f6041d41c811fb000018"},{"id":"50b4ff431d41c811fb000038","text":"Re: Pedido con id: 50b4f6041d41c811fb000018"},{"id":"50b4f5d71d41c811fb000017","text":"Re: Microfunc con id: 50ae41011d41c86ad8000004"},{"id":"50b4f8231d41c811fb000024","text":"Pedido con id: 50b4f6041d41c811fb000018"},{"id":"50b4fa921d41c811fb000028","text":"Re: Pedido con id: 50b4f6041d41c811fb000018"},{"id":"50b4fee41d41c811fb000034","text":"Re: Pedido con id: 50b4f6041d41c811fb000018"},{"id":"50b4ff291d41c811fb000036","text":"Pedido con id: 50b4f6041d41c811fb000018"},{"id":"50b4ffd71d41c811fb00003a","text":"mira os poneis deacuerdo o que"},{"id":"50b5013d1d41c811fb00004b","text":"Re: Microfunc con id: 50ae41011d41c86ad8000004"},{"id":"50b51ccb1d41c811fb000061","text":"mensaje enviado desde el panel de administraci\u00f3n"},{"id":"50b51e0c1d41c811fb000063","text":"Re: mensaje enviado desde el panel de administraci\u00f3n"},{"id":"50b51e461d41c811fb000065","text":"Microfunc con id: 50ae3b321d41c849c500000b"},{"id":"50b51e611d41c811fb000068","text":"Re: Microfunc con id: 50ae3b321d41c849c500000b"},{"id":"50b61b831d41c80b5d000004","text":"Re: mira os poneis deacuerdo o que"},{"id":"50b897a41d41c83613000034","text":"Microfunc con id: 50ae3b321d41c849c500000b"}]},"total":18}

我想得到按搜索排序的结果并使用无限滚动功能,但它不能正常工作。

我做错了什么?

【问题讨论】:

  • 你想按什么属性排序?
  • 我想对text属性进行排序,我需要每5个结果使用无限滚动!。谢谢!
  • 查看我的答案 - 但我很好奇为什么你有这个代码:element[:text] = [m.subject].join(' '),这似乎等同于:element[:text] = m.subject

标签: jquery ruby-on-rails ruby ruby-on-rails-3 jquery-select2


【解决方案1】:

排序需要在服务器端完成,而不是在客户端,因为客户端在加载时无法访问所有元素。从您的代码看来,text 等同于您的消息subject。如果是这样,您可以简单地修改这一行:

@messages = Message.where(:by_the_system => nil).
  page(params[:page]).per(params[:page_limit])

包括排序顺序:

@messages = Message.where(:by_the_system => nil).
  order(:subject).
  page(params[:page]).per(params[:page_limit])

您的回复应包括当前页面,以及这是否是最后一页:

respond_to do |format| 
 format.json { 
  render :json => {
    :results => results,
    :total => @messages.count,
    :page => params[:page].to_i,
    :last_page => @messages.last_page
 } 
}

您还需要修改您的 ajax 请求以更新 page 变量而不是未使用的“更多”偏移量:

results: function (data, page) {
          page = data.page + 1;
          if (data.last_page == data.page){ 
            // do something to disable searching as list is now exhausted
          }
          return {results: data.results};
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-21
    • 2016-01-03
    • 2013-09-30
    • 2018-08-18
    • 1970-01-01
    • 2011-05-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多