2012-03-22 92 views
0

我试图解决书中的“Rails 3 in Action”,其中作者使用下面的代码来添加使用ajax生成新文件字段的链接。我有理解困难的是如何工作的,什么是等效的JavaScript(或jQuery的),它可以在功能上等同于更好地理解它:了解jQuery Rails Gem和rails.js

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

非常感谢

回答

0

嗯,我不当然,如果我们能够比这本书更好地解释它。你有哪些麻烦?

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

来调用此方法来检查此路径。'remote'参数将导致数据远程参数指向值为true的'a'元素,这意味着它将是阿贾克斯呼吁。当页面加载时,rails.js将查找远程参数,并因此将单击事件绑定到ajax调用。

ajax调用返回时更新的位置将成为页面上的'文件'元素。

position参数指示 - 不要直接更新文件元素,而是将响应放在该元素之后的DOM中。

如果不帮助尝试这些资源:

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

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

0

我很困惑与例子,因为它是不正确的,没有任何使用Rails 3。相反,作者使用link_to_remote中有些奇怪的语法,这在Rails 3中不再支持。

此帮助程序将生成以下链接:

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

简单地触发一个AJAX GET请求到/files/new URL(因为jquery-ujs观察与data-remote="true"链接的点击,并产生这样的请求)。它不会向服务器发送任何附加参数(既不是update也不是position)。随后的DOM操作完全取决于您在服务器上生成的响应。如果你想与服务器通信(这些可能在客户端事件处理程序中使用,但并不是书中所说的,正如我所理解的那样),那么这些选项是完全没用的。

+0

我很困惑你的答案。 'link_to'(如示例中所示)不生成内联js。因此它与UJS有关。 'link_to_remote'产生内联,因而造成突然,js(这就是为什么它被弃用)。等于两者是不正确的。 – 2012-03-22 16:55:37

+0

@Ken你是对的UJS。上述书中的[那些话](http://pastebin.com/5Xti23qG)让我写下了这些。我已经更正了答案,以便更清楚。 – 2012-03-22 18:57:48