如何将正确的JSON数据从Rails控制器返回给jQuery自动完成选择框?

如何将正确的JSON数据从Rails控制器返回给jQuery自动完成选择框?

问题描述:

我努力实现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结构应该是什么。

您需要返回一个散列数组,每个散列数有两个属性 - 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

什么你的工作我不能代表的轨道部分发言,但我知道的是,自动完成构件预期的格式如下:

本地数据可以是字符串的简单阵列,或者它包含在阵列中的每个项目 对象,与标签或值 财产或两者

什么上面的意思是,如果你不回一个简单的字符串Array,你必须有包括至少标签或值属性(数组中的对象可以包含对象的数组其他的东西,小部件不关心)。例如,下面的工作就好了(你可以访问事件处理id属性(如ui.item.id

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

关于你的第二个问题:

我已通过jQuery UI文档,我无法弄清楚这个代码实际上做了什么。

的片的问题在代码应该修改组合框的基本select元件并设置适当的option为选中状态。如果您使用的是远程数据源,那么您可能完全没有这个功能。