Question

Je veux faire une recherche sur place dans mon application rails.
Je button_to_remote avec prototype, mais maintenant j'utilise JQuery, alors j'ai changé à link_to.
Ceci est mon code:

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

Je veux passer le champ de texte d'adresse à mon contrôleur, mais la sortie est pas ce que je pensais.

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

Comment puis-je soumettre ma valeur?

Était-ce utile?

La solution

Vous pouvez essayer approcher les choses un peu plus discrètement. Je recommande le remplacement de votre appel link_to avec quelque chose comme:

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

est pratiquement identique à ce que vous avez déjà, sauf qu'il comprend un identifiant unique, et aussi le chemin contrôleur / géocodage dans un attribut data-href. Cela vous aidera permettra de garder votre rubis et javascript un peu plus séparé.

Ensuite, dans votre application.js (ou quelque part similaire):

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

Ce que cela est effectivement en train de faire est la liaison d'un écouteur d'événement click à votre bouton de recherche, qui affiche l'adresse à l'URL ou le chemin fourni dans l'attribut data-href de votre lien de recherche.

J'ai aussi remarqué que dans votre code, vous configurez la id de l'adresse source en rubis. Si cet attribut id a besoin de changer en fonction une sorte de conditions de modèle de page, vous pouvez développer mon exemple en ajoutant un autre paramètre data- à votre lien. Par exemple:

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

Et encore, en remplaçant application.js ci-dessus avec quelque chose le long des lignes de:

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

Autres conseils

Le plus simple est de mettre le champ de recherche et le bouton dans un formulaire normal (en utilisant les rails l'affichage par défaut des aides). Et vous ajoutez l'option :remote => :true à la forme. Voir form_for url aide pour les docs.

Je vous gueuss déjà ajouté le fichier rails.js spécifique jquery.

Faire comme ceci affichera automatiquement le formulaire via ajax à l'action donnée.

Après cela, vous avez seulement besoin d'un « ajax: succès » gestionnaire d'événements afin que vous puissiez gérer les données

.
$('<id of the form').bind('ajax:success', function(event, data, status, xhr) {
   ... process your data here ...
} 

Vous pouvez essayer ceci:
<%= 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
  })
});


Ce n'est pas exactement une réponse directe à votre question, mais avez-vous regardé dans jrails ? Il vous permet d'utiliser les mêmes aides-prototypes que vous utilisiez avant commutables à jquery. Il a fait ma transition du prototype à jquery beaucoup plus facile.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top