我想知道是否可以在没有link_to的情况下渲染部分onclick?
我一直在寻找答案,但大多数答案都指出使用link_to
和blabla_path
和remote: 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 %>
答案 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
});