link_to和remote => true + jquery:怎么样?救命?

时间:2011-08-13 19:03:04

标签: jquery ruby-on-rails ruby-on-rails-3 partial

我试图在我的rails网站的索引上建立一个“用户”链接,以便它显示注册用户(User.all)但我希望它出现在网站的右侧部分,作为部分,一个div从一开始就没有加载整个页面。

我知道这可能是旧原型和遥控器=>真正 但是使用Rails 3.1和jQuery(和资产)我不知道该怎么做。

任何人都可以帮助或向我展示教程吗?

2 个答案:

答案 0 :(得分:47)

它实际上非常简单,只是感觉很重要,因为它是新的。基本上,通过新的不显眼的javascript支持,rails ujs脚本公开了一组可以绑定javascript函数的事件,它们是:

  1. ajax:beforeSend - 在发送之前触发
  2. ajax:成功 - 发送后触发,包含响应
  3. ajax:完成 - 在成功事件之后被解雇
  4. ajax:错误 - 出现错误时触发
  5. 您需要做的就是编写一个函数(包装在$ document.ready中),然后将一些匿名函数绑定到每个事件,或者只是您感兴趣的事件。

    例如,假设您有一个div,您希望将响应数据放入id为“response_data”,并且您有一个id为“ajax_trigger”的链接。像这样:

    <%= link_to "My Link", some_model_path(@model_instance), 
                           :remote => true, :html => {:id => "ajax_trigger"} %>
    <div id="response_data">
    </div>
    

    您需要做的就是提供类似下面的功能,以便将服务器的响应放入div中:

    $(document).ready(
         function(){
              $("a#ajax_trigger").bind("ajax:success",
                       function(evt, data, status, xhr){
                            //this assumes the action returns an HTML snippet
                            $("div#response_data").html(data);
               }).bind("ajax:error", function(evt, data, status, xhr){
                        //do something with the error here
                        $("div#errors p").text(data);
               });
    });
    

    真的,你正在用javascript做的就是在从服务器返回时处理响应。您不必执行任何特殊操作来启动XHR请求,您也可以安全地将此方法存储在作为静态资产提供的.js文件中。如果您使用的是Rails 3.1,那么您应该将它放在与控制器对应的适当命名的javascript文件中。在您的控制器中,您需要确保指定:layout =&gt;在responds_with()方法中为false,这样控制器只返回它呈现的部分或模板,而不是完整的页面。此设置也适用于返回由客户端和JSON执行的javascript的操作,具体取决于您在请求中指定的数据类型。

    我发现这篇博文非常有帮助: http://www.alfajango.com/blog/rails-3-remote-links-and-forms/

答案 1 :(得分:9)