【发布时间】:2014-08-25 16:53:22
【问题描述】:
我的问题
我正在开发一个 Rails 站点,并希望根据某些条件使用 Javascript 在我的某些视图中呈现部分视图。例如,如果用户在访问某些页面时未登录,我希望在模式框中显示 Devise 登录/登录提示的部分视图。
我在弄清楚这一点时遇到了很多麻烦 - 第一个问题是我尝试在资产管道中使用 render,但经过一些研究发现它一开始就不起作用。
然后我尝试将 js.erb 文件放入我的 public/javascripts 文件夹,但 javascript_include_tag 强制将“.js”附加到文件名并使用常规 src=/javascripts/... 并没有呈现“.erb”的东西,而是它会附加文本<%=j render :partial ... %>
我的解决方案
我在这里提出了这个解决方案,想知道是否有更好的解决方案来保持代码整洁。我将拥有一些其他的 Javascript,它们将在不同的视图上呈现相同的内容。
我创建了一个app/views/shared/javascripts 目录,我将在其中放置[filename].html.erb 文件。
为了让 Javascript 正确运行,我将 <%= render :partial => 'shared/javascripts/...' %> 在任何我想运行该脚本的地方。
在那个脚本里面是这样的:
<script>
$(document).ready(function() {
...
$(.class).append("<%=j render :partial => 'shared/modal' %>");
...
});
</script>
有更好的方法吗?
据我所知——这会做我想做的事。我只是害怕我看错了。我将在该应用程序的另一部分工作一段时间,我真的希望验证这是可以接受的和体面的,或者找到正确的方法来确保我可以在我的 JS 文件中使用 ERB。
【问题讨论】:
-
为什么要用js来渲染局部?
-
这可能是我在脑雾中熬夜太晚并陷入如何做事的想法之一 - 但我正在使用 jQuery 来调出模态框.所以我有我的观点,我有时需要模态 - 那就是我将包含具有脚本标签的
shared/javascripts/my.html.erb的地方 - 该文件中的 JS 然后附加模态(另一个带有 HTML 的 html.erb模态框)到视图。这样写出来听起来有点可笑。有更好的解决方案吗? -
是的,为什么不使用 ruby 条件语句,它更简单、更简洁。
-
我是。在视图中,我只调用在特定条件下渲染部分,即。
customer_logged_in?设计助手。我的 Javascript 明确用于处理 DOM 操作,方法是采用预先编写的 HTML 代码并将其粘贴在我的视图中。 -
你的问题是
would like to use Javascript to conditionally render partials那么你能解释一下使用js的具体目的是什么吗?之后将能够更好地帮助您
标签: javascript jquery ruby-on-rails ruby asset-pipeline