我遇到了遠程執行操作和第一次單擊鏈接時不更新的部分問題。第一次點擊時部分未更新
的視圖中(部分名爲books
)我創建一個鏈接:在routes.rb中 還有一個條件在讀這本書,使顯示不同的文本被定義
link_to "⊗", read_book_path(book), :remote => true
的read_book_path
。
在我的控制,我已經定義了一個新的動作:
def read
@books = Book.all
@book = Book.find(params[:id])
@book.read = [email protected]
@book.save
respond_to do |format|
format.html { redirect_to(books_url) }
format.js {render :layout => false, :locals => { :book => @book } }
end
end
這意味着我需要一個文件read.js.erb
,這個文件的內容是:
$("#books").empty().html("<%= escape_javascript(render(:partial => "books")) %>");
當我點擊鏈接,我可以在終端窗口中看到數據庫字段已更新,但部分不是。點擊相同的鏈接再次更新部分。
將鏈接更改爲:remote => false
也可以,但頁面會重新加載(如預期的那樣)。
我試圖用Safari和Developer工具調試它,當我第一次點擊鏈接時,我可以看到服務器的響應。 這裏有什麼不對,由<%= escape_javascript(render(:partial => "books")) %>
生成的HTML包含錯誤的HTML與部分的舊內容。只有第二次或第三次點擊纔會顯示更新後的HTML。
我已經集成了jquery-ujs - 是部分不會第一次更新的原因還是我缺少其他東西?
這真的讓我頭痛,你能幫我嗎?
編輯: 如果有幫助:我在application.js中創建了一個到ajax:before
和ajax:complete
的監聽器。第一個顯示一個微調,第二個隱藏它。 當我點擊鏈接時,微調器顯示,但它不隱藏。
謝謝您的回答。改變順序解決了我的問題。 :) 我想要做的是某種開關,點擊一個「讀」書將其標記爲「未讀」,反之亦然。 因此,我正在讀取當前值,將其反轉並保存。我找不到更好的方法。 – dmnkhhn 2010-11-19 00:21:24