2009-05-25 46 views
1

我正在使用Rails和jQuery與RJS模板來執行各種AJAX請求。從jquery獲取請求中運行rails的RJS模板

對於大多數我的Ajax的東西,我附上提交處理程序的形式在我的application.js如下:

$('#tagging_flickr_photos').submitWithAjax(); 
$('#tag_submit').click(function() { 
    $('#flickr-photos-status').show(); 

}); 

這就需要形式的行動,做一些處理,然後轉發給RJS模板如下:

$("#flickr-photos-status").hide(); 
$("#flickr-photos").fadeIn(); 
$("#flickr-photos").html("<%= escape_javascript(render(:partial => 'flickr_photos_for_tagging_content')) %>"); 

這是一種享受。

現在我正在嘗試做同樣的事情,只是基於在下拉列表中選擇不同的值而不提交表單。 這裏是我的JavaScript來處理程序連接到下拉:前鋒

$('#film_film_name_id').change(function() { 
    $.get('/admin_film/make_tags?film_name_id=' + $("#film_film_name_id").val() + '&film_speed_id=' + $("#film_film_speed_id").val()); 
}); 

我控制器的方法做了一些處理,然後到RJS模板(make_tags.js.erb):

$("#film_tags").val(<%[email protected]%>) 

但是,模板似乎沒有執行。 我可以在我的日誌中看到它正在調用我的方法並呈現模板的條目,但無論我放入模板中什麼都沒有發生。 我已經把JavaScript警報放在那裏,它不會觸發。

我認爲問題是附加我的JavaScript處理程序,但我不知道我缺少什麼。

在此先感謝您的幫助。

回答

5

我想你必須告訴jQuery你期待JavaScript並且它應該被執行。請嘗試以下,看看它的工作原理:

$('#film_film_name_id').change(function() { 
    var url = '/admin_film/make_tags?film_name_id=' + $("#film_film_name_id").val() + '&film_speed_id=' + $("#film_film_speed_id").val() 
    $.ajax({ 
    type: 'GET', 
    dataType: 'script', 
    url: url 
    }); 
}); 

請檢查jQuery.ajax() jQuery的文檔,如果因爲我沒有測試的代碼它不工作。

+0

非常感謝! – 2009-05-25 17:17:15

1

HI,

我使用的是直接通過原型庫調用觀察者(未jQuery的)

 <td><div id="outconditionnals_container"> 
       <% if [email protected]? then %> 
         <%= collection_select(:OUTconditionnal, :id, @milestone.howto.conditionnals, :id, :name, {:prompt => true}, {"index" => @outconditionnalID.to_s}) %> 
         <%= observe_field("OUTconditionnal_"[email protected]_s+"_id", 
           :url => { :action => :AJAX_selection_change }, 
           :with => "'id='+value+'&dir=out&type=conditionnal&milestoneID="[email protected]_s+"'", 
           :on => "changed")%>       
       <% end %> 
      </div> 
     </td> 

然後我RJS是從我的動作呈現給referesh一些其他形式的元素。

希望這會有所幫助。

+0

謝謝 - 另一個答案適用於我,但當我看到有用的機會時,我會閱讀觀察員的內容。 – 2009-05-25 17:19:04

0

或者,您也可以使用$ .get您一直在使用。
這裏是一個髮型你的例子:

$('#film_film_name_id').change(function() { 
    $.get(
     '/admin_film/make_tags', // or something like '<%= make_tags_admin_film_path %>' 
     { 
     film_name_id: $("#film_film_name_id").val(), 
     film_speed_id: $("#film_film_speed_id").val() 
     }, 
     null, // you may define an additional callback here, if that makes sense 
     "script" 
    ); 
}); 
0

jQuery的方法getScript是做好上述ujh什麼推薦一個不錯的簡寫。