肯定是有辦法做到這一點,它的一些工作,但一旦你得到了它的竅門它很容易。
首先,您需要在選擇框的change
事件中附加jQuery函數。這可以通過在application.js
文件中添加一些javascript來完成。我們想在這裏這樣做,所以我們的javscript仍然是unobtrustive。您可以嘗試在你的application.js
文件是這樣的:
$(document).ready(function(){
$("#select_field_id").change(function(){
var id = $(this).children(":selected").val();
var params = 'some_id=' + id;
$.ajax({
url: "/some_controller/change_folder",
data: params
})
});
這樣做是附加一個匿名函數的change
事件選擇字段的id爲select_field_id
。當該字段發生更改時,所選選項的id
將存儲在變量id
中,然後我們將通過執行var params = 'some_id=' + id;
爲請求創建一個參數。 some_id
將會是你正在改變的標識(所以如果這就是你在示例中使用的folder_id
)。
現在我們需要在我們的控制器中創建處理這個請求的方法。因此,與該文件夾例如去,將其添加到該文件夾控制器:
def change_folder
@folder = Folder.find(params[:some_id])
respond_to do |format|
format.js
end
end
這可以簡單地認爲基於您的Ajax請求發送到change_folder
id的文件夾。它也將尋找相應的change_folder.js.erb
或change_folder.js
文件來呈現。
現在我們需要編寫一個change_folder.js.erb
文件。我們需要用我們獲得的新文件夾替換頁面某些部分的HTML,因此您應該使用某種div
或其他部分的唯一ID。
裏面change_folder.js.erb
,我們可以這樣寫:
$('#your_div').html("<%= escape_javascript(render(partial: "folder",
locals: { :folder => @folder })).html_safe %>")
,這會使得部分稱爲_folder.html.erb
是在同一目錄中change_folder.js.erb
文件。該部分將需要使用@folder變量用於顯示領域,所以你會需要這樣的東西:
<%= @folder.name %>
<%= @folder.last_updated %>
裏面你_folder.html.erb
部分。 .name
和.last_updated
當然只是組成Folder文件夾的屬性。您必須使用您提供給Folder模型的任何屬性。
這應該讓你去你需要的地方。如果您需要澄清任何事情,請告訴我。
謝謝,看來問題解決了,我會回來,如果我需要更多的細節 – user1455116