0

有没有办法让我从 javascript 中调用 ruby​​ on rails 函数?例如,我有一个 partial => _micropost_form.html.erb,我希望它在单击按钮时出现在单独的 div 中。我认为最好的方法是使用 javascript。目前我有:

document.getElementById("micropost").innerHTML= 

所以我很迷茫。我觉得这应该是一个非常简单的问题。谢谢!

编辑:

所以我的 _header 文件中有一个链接:

<li>Add Content</li>

以及一个div:

<div id="popout"></div>

在我的内容控制器中,我有一个方法:

def add_content
@content = Content.new
respond_to do |format|
format.html
format.js
end

以及文件(位于视图/内容中)add_content.js.erb(_content_form 是位于共享中的 html.erb 文件)

$('#popout').replaceWith("<%= escape_javascript render
            (:file => 'shared/_content_form') %>");

我知道我应该打的电话<li>Add Content</li>涉及link_to但是,我还不能让它正常工作。控制台的输出通常看起来像页面刷新。任何帮助将不胜感激!

4

3 回答 3

0

让它出现在 iframe 中:

function appear_it() {
   document.getElementById("micropost").innerHTML = "<iframe id="micropostframe" src="bla/whatever.html"></iframe>";
}

然后你可以用 css 设置它的样式。

有一个带有属性 onclick="appear_it();return false" 的按钮或链接。

于 2012-05-06T22:33:25.313 回答
0

我认为对于您要实现的目标,将请求上的“div”呈现为隐藏,然后链接触发一个 js 函数来显示它。

这应该是一个很好的解决方案,除非“链接”为您想要呈现的内容带来了一些条件,例如,如果只有一件事要显示,或者如果您有许多链接要在同一个 div 上显示不同的内容,具体取决于您的链接点击。如果第二种情况是您要解决的问题,您应该真正检查 ajax 调用。顺便说一句,JQuery 是你这类东西的朋友。

于 2012-05-06T22:46:05.063 回答
0

除了ismaelga的回答之外,我想补充一点,如果您有静态 HTML 内容,_micropost_form.html.erb那么没有理由应该是erb文件或partial. 在 a 中包含该内容hidden div,然后根据按钮单击切换该内容将是一个很好的解决方案。

但是,如果您在该文件中有动态内容,那么最好的办法是使用AJAX. Felix Cling在评论中提供的一些链接是一个很好的起点。我发现自己在文件中使用了以下代码行.js.erb来实现您想要的效果:

$('#micropost').replaceWith("<%= escape_javascript render(:file => 'micropost_form.html.erb') %>");

或者,您可以使用 jquery append而不是replaceWith

于 2012-05-07T00:15:17.120 回答