2011-10-11 52 views
1

我努力實現jQuery UI的「組合框」示例。 。如何將正確的JSON數據從Rails控制器返回給jQuery自動完成選擇框?

render :text => Product.find_by_sql("select id, part_number from products where part_number like '#{params[:term]}%'").collect{|p| p.part_number}.to_json 

我真正想做的事情,當然是:我已經建立了一個遠程數據源,並將其返回值我鍵入然而,只有當我返回一個字符串數組,像這樣的作品,就是讓它返回AR對象的id。不幸的是,當我嘗試在子數組中返回它們時,我的組合框中出現一堆「未定義」值。

這裏是一個觸發我的組合框的「選擇」事件:

  select: function(event, ui) { 
       ui.item.option.selected = true; 
       self._trigger("selected", event, { 
        item: ui.item.option 
       }); 
      }, 

我已通過jQuery UI的文檔,我想不通這是什麼代碼實際上做。另外,我無法弄清楚我需要返回的JSON結構應該是什麼。

回答

1

您需要返回一個散列數組,每個散列數有兩個屬性 - id和label。

我已經成功使用此:

collect{|p| {:label=>p.name, :id=>p.id}}.to_json 

(我想你想你的對象,而不是叫名字的PART_NUMBER,但是這就是格式)

另外,我想你代碼是打開的SQL注入,你應該使用「喜歡?」句法。

Product.where("part_number like ?", "#{params[:term]}%") 

還有這種寶石,我還沒有使用,但應該工作:

https://github.com/crowdint/rails3-jquery-autocomplete

1

什麼你的工作我不能代表的軌道部分發言,但我知道的是,自動完成構件預期的格式如下:

本地數據可以是字符串的簡單陣列,或者它包含在陣列中的每個項目 對象,與標籤或值 財產或兩者

什麼上面的意思是,如果你不回一個簡單的字符串Array,你必須有包括至少標籤或值屬性(數組中的對象可以包含對象的數組其他的東西,小部件不關心)。例如,下面的工作就好了(你可以訪問事件處理id屬性(如ui.item.id

[{ label: 'Google', id: '1234' }, { label: 'Yahoo', id: '2345' }, ... ]; 

關於你的第二個問題:

我已通過jQuery UI文檔,我無法弄清楚這個代碼實際上做了什麼。

的片的問題在代碼應該修改組合框的基本select元件並設置適當的option爲選中狀態。如果您使用的是遠程數據源,那麼您可能完全沒有這個功能。

相關問題