2012-12-19 10 views
6

In Ruby auf Schienen, ich versuche 2 Teiltöne zu aktualisieren.Beitrag Antwort mit teilweise render, dass Ereignisse funktioniert nicht

show.html.erb:

<div id="filters"><%= render :partial => "pricelistfilters" %></div> 

pricelistfilters.html.erb:

<% @properties.each do |prop| %> 
    #Render the page on properties (and the newproperties) 
    #<select ...><option>...</option><option>...</option> 
    #</select> 
<% end %> 

products.js -> Veranstaltungen für die erbrachten Teil

$(window).ready(function(){ 
    selectionchanges(); 
}); 
function selectionchanges(){ 
    $('#filters select').change(function(){ 
    //Doing stuff to send with ajax 

    //Ajax: 
    $.ajax({ 
     url: document.URL, 
     type: 'POST', 
     data: params 
    }); 
    }); 
} 

products_controller.rb -> Code-Änderungen zu verarbeiten gemacht

def show 
    #Changing the properties (and the pricelist properties) 
    @properties #is filled 
    @newproperties #is filled 
    respond_to do |format| 
    format.html 
    format.js 
    end 
end 

show.js.erb

$('#filters').html('<%= escape_javascript(render :partial => "pricelistfilters") %>'); 
selectionChanges(); 

Mein gerenderte Artikel ist vollkommen gut. Wenn ich jedoch die richtige Antwort mit dem gerenderten Objekt habe, sendet es den Ajax einfach nicht mehr. Das Ereignis auf meinen ausgewählten Elementen ist also weg, während ich sicher bin, dass ich sie mit den "selectionchanges()" zurückgesetzt habe. am Ende meiner show.js.erb-Datei?

Kann jemand eine Lösung dafür sehen?

Grüße und Dank im Voraus

+0

Code-Blöcke benahmen sich seltsam: Danke @jdl für die Hilfe! – ReBa

+0

Gern geschehen. Ich hoffe, Sie finden eine gute Antwort auf Ihr Problem. – jdl

+3

Sie haben 'selectionchanges' UND 'selectionChanges', ist das ein Tippfehler? – RadBrad

Antwort

2

Versuchen jQuerys Live-Funktion auf product.js, wie unten mit:

$(window).ready(function(){ 
    selectionchanges(); 
}); 
function selectionchanges(){ 
    $('#filters select').live('change', function(){ 
    //Doing stuff to send with ajax 

    //Ajax: 
    $.ajax({ 
     url: document.URL, 
     type: 'POST', 
     data: params 
    }); 
    }); 
} 

Grundsätzlich sind Sie den HTML-Dom Element ersetzt, die Sie zuerst die gebundenen Ereignis 'ändern' zu. Mit live, auch wenn Sie das Element ersetzen, wird jQuery die Bindung für Sie wiederherstellen.

Hoffe es hilft!

+0

Sollte diesen Look haben. Perfekt arbeiten! Danke Kumpel. – ReBa

Verwandte Themen