我遇到了远程执行操作和第一次单击链接时不更新的部分问题。第一次点击时部分未更新
的视图中(部分名为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