2017-04-22 65 views
0

我對遙控器感到困惑:在Rails窗體中是這樣的,我認爲需要一些JavaScript來使其成爲異步的,但這似乎只是打破了我的頁面。Rails和AJAX remote:true還需要什麼?

這是一個非常簡單的index.html.haml包括部分顯示所有的約會:

%h1 Calander 

%h2 AppointmentsController 
%h3 Make a new appointment 

= form_for @appointment, remote: true do |f| 
    = f.text_field :title 
    = f.text_field :appt_time 
    = f.submit 'Make appointment' 

#appointments 
    =render 'appointments' 

這就是前面提到的部分:

[email protected] do |a| 
    %h3= a.title 
    %p= a.appt_time 

索引和創建控制器方法:

def index 
    @appointments = Appointment.order('appt_time ASC') 
    @appointment = Appointment.new 
    end 

    def create 
    @appointmet = Appointment.create(appointment_params) 
    redirect_to :root 
    end 

現在,這工作正常。我可以添加一個新的約會,點擊提交,新的約會顯示,而不刷新頁面,我想因爲我已經包括remote: true。那麼我需要添加其他什麼來處理請求?我是否違反了最佳做法,不包括處理此請求的內容並完全依賴於遠程:是真的?

回答

1

沒有更多的要求,除非你想要一些回調AJAX調用。你沒有違反任何約定。你可以閱讀這個document,以避免混淆。

1

讓我們退後一步。

Web應用程序可以響應不同的請求格式。 Rails有內置的格式處理。

所以一個請求可能會通過HTML請求index,這個響應是一個HTML文件。它也可能通過JSON,XML,PDF甚至JavaScript請求index

每當您添加remote: true時,您都會告訴您的表單通過JS代替HTML來發出POST請求。

在你的觀點你會有一堆HTML.ERB文件。這些視圖是請求響應。

因此,要處理JS索引索引,您將需要一個app/views/appointements/index.js文件。

這將作爲對請求的響應發送,瀏覽器將知道如何處理JS響應。

index.js中,您可以編寫在接收到響應後執行的JS。

您也可以將部分加載到頁面中。

例如:

# app/views/appointements/index.js 
$('#appointements').html('<%= j render "appointements" %>') 

這會使部分內容作爲JavaScript字符串響應。

http://guides.rubyonrails.org/working_with_javascript_in_rails.html

+0

謝謝!在<%= j render「appointements」%>'中的「j」是什麼? – tfantina

+0

由於ERB是文件嵌入,所有Ruby代碼都被轉換爲文件內容。我們希望文件內容是一個JS字符串「

」。這將告訴ERB不要把它寫成文件內容,而應該寫成JS代碼:)如果我們沒有,並且HTML部分內容有一個''/ n「'換行符,那麼這將成爲文件中的換行符,而不是一個包含'「/ n」'的JS字符串。 – fbelanger