是否可以在没有link_to的情况下渲染部分onclick?

时间:2014-04-15 01:46:38

标签: javascript jquery ruby-on-rails ajax ruby-on-rails-4

我想知道是否可以在没有link_to的情况下渲染部分onclick?

我一直在寻找答案,但大多数答案都指出使用link_toblabla_pathremote: true,但我不想通过控制器处理它,而只是视图侧。

这样的东西

<%= if button.click? render "form" %>&lt; - (这显然不起作用,但这样的事情)

谢谢

顺便说一句,我使用的是Rails 4.0.1

====

更新

我已经使用ajax和jquery动态地尝试了它,但它很有效但很奇怪。请看下面我的代码,我已经把链接放在一个循环中但是当点击“新评论”时,它出现在第一篇文章上,当我点击第二/第三/第四的所有“新评论”时部分在第一篇文章中得到渲染。到底是怎么回事?当我点击第二篇文章中的“新评论”时,它应该出现在第二篇文章而不是第一篇文章上。

<% @posts.each do |post| %>

   <%= post.title %>

   <%= post.content %>

   <%= link_to 'New Comment', new_comment_path, id: 'new_comment', remote: true %>

<% end %>

2 个答案:

答案 0 :(得分:2)

如果你真的想在点击链接或按钮时动态获取视图,你必须通过控制器来完成。根据MVC规则。但在你的情况下,你可以尝试像加载页面渲染部分并使其隐藏。点击按钮或链接删除其隐藏的属性,通过 jQuery或javascript

答案 1 :(得分:1)

<强>简单

Sabyashachi Ghosh关于保持元素隐藏在DOM中,因此您可以在点击时取消隐藏它们。虽然效率很低,但它可以达到你想要的效果


<强>动态

你必须使用Ajax&amp;用于处理请求的控制器操作

从Rails动态加载内容的唯一方法是发送请求。 Rails就像一个巨大的API - 你必须将你的请求发送到一系列endpoints(路由),Rails然后用控制器来处理

您的问题是,如果您具有所需的路由以将请求发送到特定的控制器操作,您将只能动态加载某些内容,然后该操作将处理请求&amp;允许Rails呈现结果

我会这样做:

#app/controllers/application_controller.rb
Class ApplicationController < ActionController::Base
    layout Proc.new {|controller| controller.request.xhr? false : "application" } #-> sets layout to false for ajax requests
end

#view
<%= link_to "Load Popup", action_path, remote: :true %>

#javascript
$("a[data-remote=true]").on("ajax:success", function(data) {
    //handle data
});