2010-11-27 15 views
8

Raylar uygulamasında yerinde arama yapmak istiyorum.
Ben prototype ile button_to_remote kullandım, ama şimdi JQuery kullanıyorum, bu yüzden link_to olarak değiştirdim.
Bu benim kodudur: Benim denetleyicisi adres textfield'ı geçmek istiyorumlink_to raylarda jquery params ile

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

ama çıkış beklediğim değil.

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

Değeri nasıl gönderirim?

cevap

15

Biraz daha sedasız şeyler yaklaşan denemek isteyebilirsiniz.

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

Bu benzersiz bir kimliği ve aynı zamanda bir data-href özelliğinde kontrolör/coğrafi kod yolunu kapsaması haricinde, zaten ne neredeyse aynıdır: Ben böyle bir şey ile link_to çağrıyı yerine öneriyoruz. Bu, yakutunuzu ve javascript'inizi biraz daha ayrı tutmanıza yardımcı olur. içinde Sonra

sizin (ya da bir yerde benzer) application.js:

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

Bunun etkili bir url veya yola adresi data-href sağlanan mesajlar, arama düğmesi, bir click olay dinleyicisi bağlayıcıdır yapıyor Arama bağlantınızın özelliği.

Ayrıca, kodunuzda, ruby'de kaynak adresinin id değerini ayarlıyorsunuz. Bu id özniteliğinin bir tür sayfa şablonu koşullarına bağlı olarak değişmesi gerekiyorsa, bağlantınıza başka bir data- parametresi ekleyerek örneğimde genişletebilirsiniz. Yine

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

Ve application.js içinde çizgisinde bir şey ile yukarıda değiştirilmesi: Örneğin:

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

Bu, sorunuzun doğrudan bir cevabı değildir, ancak jrails'a baktınız mı? Jquery'ye geçiş yapmadan önce kullandığınız aynı prototip javascript yardımcılarını kullanmanıza izin verir. Benim prototip geçişimi çok daha kolay geçiş yaptı.

2

Bu deneyebilirsiniz:
<%= 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 
    }) 
}); 

 
3

kolay yolu arama alanını koymak ve normal bir biçimde düğmeye göndermektir (kullanarak varsayılan raylar yardımcıları görüntüler). Ve forma :remote => :true seçeneğini eklersiniz. Dokümanlar için bkz. form_for url helper.

Daha önce jquery specific rails.js dosyasını eklediniz.

Böyle yapmak, formu ajax aracılığıyla verilen eyleme otomatik olarak gönderir.

Bundan sonra, yalnızca bir 'ajax: success' olay işleyicisine ihtiyacınız vardır, böylece verileri işleyebilirsiniz.

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