2014-09-22 15 views
5

İlk gerçek Rails uygulamasının ortasındayım ve hareket halindeyken öğreniyorum. Bir formda iç içe geçmiş nitelikler yaratmam gereken bir durum var ve bununla ilgili demiryollarına bakıyorum (196 ve 197). İkinci bölümde, artık raylarda bulunmayan bir link_to_function yöntemi kullanıyor. 4.1.Raylar için link_to_function nasıl değiştirilir 4.1

Nasıl değiştirileceğini merak ediyorum. Ben link_to için çalışıyordum ve benzer bir soru yazmış, ancak hiçbir faydası olmayanlar için önerilen çözümlerin çoğunu denedim. İşte

anda gibi benim bakış kısmi görünüyor (gerçi ben denedim çok şey ...) burada

<p class="offset1 fields"> 
    <%= f.hidden_field :_destroy %> 
    <%= link_to "remove", '#', onclick: 'remove_fields("this")' %> 
</p> 

Ve remove_fields içeren benim .js.coffee dosyası() işlevi budur :

remove_fields = (link) -> 
    $(link).previous("input[type=hidden]").value = 1 
    $(link).up(".fields").hide 

Bu fonksiyon formdan bir alanı kaldırmak gerekiyordu, ama bunun yerine sadece işlevini çağırarak olmadan url '#' ekler edilir.

Öğelerdeki javascript (coffeescript) işlevine görünümden bağlanmanın en iyi yolu nedir?

+0

görüyoruz http://stackoverflow.com/questions/14324919/status raylar-link-to-function-amortisman – tito11

cevap

4

Bununla uğraşmak iyi bir yoludur:

a) href niteliğini yı "javascript: void (0);" b) bağlantı

<%= link_to "remove", "javascript:void(0);", id="remove_link" %> 

c bir DOM kimliği veya CSS sınıfı ayrıntısını Set) bu doğru CoffeeScript sözdizimi olup olmadığını kontrol edin (js ekleyin elemana dinleyici tıklayın)

$ -> 
    $('#remove_link').click =()-> 
    $(link).previous("input[type=hidden]").value = 1 
    $(link).up(".fields").hide 

d) Her zaman onclick'i kullanmaktan kaçının: html öğelerinde.

GÜNCELLEME:

e) İşte yorumunuzun ardından Kodunuzdaki için işe yarayabilecek ne alternatif() 'dir:

$ -> 
    $('#remove_link').click =()-> 
    $('.offset1.fields input').attr('value', 1); 
    $('.offset1.fields').hide(); 
+0

Hala çalışmıyor. Sadece test etmek için bir uyarı bildirimi yürütmek için coffeescript dosyasını değiştirdim, ama asla idam edilmez. Bağlantının tıklanması, tarayıcının sol alt kısmının "javascript: void (0); /assets/application.js dizinine giden –

+0

, işlevin javascript'e uygun şekilde derlendiğini ve dahil edildiğini gösterir, ancak her hangi bir nedenden dolayı çağrılmıyor –

+0

belgesi içinde yeni javascript işleviniz hazır mı? Bunu göstermek için cevabımı biraz güncelledim. –