8

我想在我的 rails 应用程序中进行就地搜索。
我在原型中使用了 button_to_remote,但现在我使用的是 JQuery,所以我更改为 link_to。
这是我的代码:

<%= link_to "Search", {:action => "geocode", :with => "'address='+$('#{address_helper_id}').value"}, :method => :post, :remote => true %>

我想将地址文本字段传递给我的控制器,但输出不是我所期望的。

/mycontroller/geocode?with=%27address%3D%27%2B%24%28%27record_location___address%27%29.value

我如何提交我的价值?

4

4 回答 4

16

您可能想尝试更不引人注目地处理事情。我建议将您的link_to电话替换为以下内容:

<%= link_to "Search", "#", :id => "search_geocode", :"data-href" => my_controller_geocode_path %>

这实际上与您已经拥有的相同,除了它包含一个唯一的 id 以及data-href属性中的控制器/地理编码路径。这将有助于让您的 ruby​​ 和 javascript 更加分离。

然后在你的application.js(或类似的地方):

$('#search_geocode').live('click', function(event){
    event.preventDefault();
    $.post($(this).attr('data-href') + "?address=" + $('#address').val(), function(data){} );
});

这实际上是将事件侦听器绑定到您的搜索按钮,该按钮将地址发布到搜索链接属性中click提供的 url 或路径。data-href

我还注意到,在您的代码中,您id在 ruby​​ 中设置了源地址。如果此id属性需要根据某种页面模板条件进行更改,您可以通过data-在链接中添加另一个参数来扩展我的示例。例如:

<%= link_to "Search", "#", :id => "search_geocode", :"data-href" => my_controller_geocode_path, :"data-address-id" => address_helper_id %>

再一次,用application.js以下内容替换上面的内容:

$('#search_geocode').live('click', function(event){
    event.preventDefault();
    $.post($(this).attr('data-href') + "?address=" + $($(this).attr('data-address-id')).val(), function(data){} );
});
于 2010-12-07T14:05:33.077 回答
3

最简单的方法是将搜索字段和提交按钮放在普通表单中(使用默认的 rails 视图助手)。然后将:remote => :true选项添加到表单中。有关文档,请参阅form_for url helper

我猜你已经添加了 jquery 特定的 rails.js 文件。

这样做会自动通过 ajax 将表单发布到给定的操作。

之后,您只需要一个 'ajax:success' 事件处理程序,以便您可以处理数据。

$('<id of the form').bind('ajax:success', function(event, data, status, xhr) {
   ... process your data here ...
} 
于 2010-12-08T20:59:36.213 回答
2

你可以试试这个:
<%= text_field_tag :address %>
<%= submit_tag "Search", :id => "search_button" %>


### Paste following code in your javascript

$("#search_button").live("click", function(){
  $.ajax({
    complete:function(request){},
    data:'address='+ $('#address').val(),
    dataType:'script',
    type:'get',
    url: '[ROUTE TO ACTION]' // in your case, may be '/[CONTROLLER NAME]/geocode' until you define route
  })
});


于 2010-12-03T09:41:00.897 回答
-1

这不完全是您问题的直接答案,但是您是否研究过jrails?它允许您使用在切换到 jquery 之前使用的相同原型 javascript 助手。它使我从原型到 jquery 的过渡变得更加容易。

于 2010-11-27T17:17:53.997 回答