【问题标题】:Rails Ajax - load partial view via javascriptRails Ajax - 通过 javascript 加载部分视图
【发布时间】:2013-01-10 18:04:32
【问题描述】:

我正在构建一个类似于 twitter 的小型提要。用户有输入,而您有输入源。

Feed 实际上是一个帖子列表。每个帖子的视图由_post.html.haml 部分视图定义。

我有一个在后端创建新帖子的 AJAX 发布方法。问题是您必须刷新页面才能真正查看出现在提要上的帖子。

我想将 html 附加到提要列。但是,我使用局部视图在提要列上创建了一个帖子,该视图接受帖子详细信息的局部变量。

部分视图位于服务器端。我怎样才能仍然使用相同的局部视图来获取我创建的新帖子的 html 代码,以便我可以将其附加到提要列而无需刷新页面。

谢谢!

【问题讨论】:

    标签: ruby-on-rails ajax partial-views


    【解决方案1】:

    邮政编码sn-ps,所以很容易回答。无论如何,你可以这样做。当您使用 get ajax 请求创建新帖子时,它将进入您的控制器操作。在控制器操作中,您可以执行以下操作:

       def get_new_post   #This is the controller action called by your ajax
         post = Post.create!(ajax_params)
         render :partial => "post", :locals => {:post => post}
       end
    

    鉴于您将新帖子附加到帖子列表如下:

    $.get("ajax_request", function(data, status){
     if(status=="success"){  //if your ajax is success
       $("#post-list").append(data)  //Assuming post-list is the div id of list of posts
     }
    });
    

    【讨论】:

    • 渲染器如何知道在哪里渲染局部?
    • 您将在 ajax 请求的数据中获得渲染数据,以便您可以将其附加到帖子列表中
    • 这可能会起作用(现在将尝试一下)。我想知道您是否可以通过控制器替换 html,如 adamdunson 所示?这意味着我不必编写如图所示的 javascript 代码。我无法让 adamdunson 的代码工作......
    • 在 adamdunson 情况下,当您拥有部分帖子列表时,可能会起作用。但是,当您有部分显示单个帖子时,我的解决方案将起作用。我认为可能还有其他解决方案。但我通常使用这个。
    • 无论如何,您都是使用 ajax 创建帖子,因此它将是 get 请求,因此当您渲染部分内容时,响应数据将包含您的新帖子
    【解决方案2】:

    在您发布到的操作中尝试render(:update)

    render(:update) do |page|
      page.replace_html 'divID', :partial => 'your-partial'
    end
    

    【讨论】:

    • 这将前端耦合到后端,因为前端依赖于后端了解前端的结构。
    • 这也可以是 jQuery 中的一个吗?从文档来看,它是作为原型助手编写的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-19
    • 2012-12-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多