了解jQuery Rails Gem和rails.js

时间:2012-03-22 09:09:19

标签: jquery ruby-on-rails-3

我正在尝试解决“Rails 3 in Action”这本书,其中作者使用以下代码添加了一个使用ajax生成新文件字段的链接。我很难理解它是如何工作的,什么是等效的javascript(或jQuery),它在功能上等同于更好地理解它:

 <%= link_to "Add another file", new_file_path,
     :remote => true,
     :update => "files",
     :position => "after"
 %>

非常感谢

2 个答案:

答案 0 :(得分:0)

嗯,我不确定我们是否能比这本书更好地解释它。你遇到了哪个部分?

您的代码将变为'a'链接,其href将是new_file_path的url(可能是文件控制器中的新方法)。您可以通过键入app.new_file_path

在rails控制台中调用此方法来检查此路径

'remote'参数将为'a'元素生成一个数据远程参数,其值为true,这意味着它将是一个ajax调用。当页面加载rails.js时会找到远程参数,因此将click事件绑定到ajax调用。

ajax调用返回时更新的位置将是页面上的'files'元素。

position参数表示 - 不直接更新files元素 - 但是将响应放在DOM之后的那个元素中。

如果这对尝试这些资源没有帮助:

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

http://net.tutsplus.com/tutorials/javascript-ajax/using-unobtrusive-javascript-and-ajax-with-rails-3/

答案 1 :(得分:0)

我对这个例子非常困惑,因为它不正确并且与Rails 3无关。相反,作者使用来自link_to_remote的有些奇怪的语法,Rails 3中不再支持它。

此助手将生成以下链接:

<a update="files" position="after" data-remote="true" href="/files/new">Add another file</a>

只是向/files/new网址发出AJAX GET请求(因为jquery-ujs会观察点击data-remote="true"的链接并产生此类请求)。它不会向服务器发送任何其他参数(updateposition)。后续的DOM操作完全取决于您在服务器上生成的响应。

因此,在Rails 3 updateposition选项完全无用,如果你想与服务器通信(那些可能在客户端事件处理程序中使用,但它不是那本书所说的,据我所知)。