我有一个Rails应用程序,它使用javascript(Backbone)在每个用户个人资料页面/views/users/show.html.erb上显示用户特定数据。我这样做是通过传递<%= @ user.id%>然而,作为Backbone的获取函数的数据参数,我知道如何获得<%= @ user.id%>的唯一方法进入Backbone的fetch功能是通过在每个views / users / show.html.erb页面中嵌入javascript,因此允许Backbone为每个views / users / show.html.erb页面加载不同的用户特定信息。虽然这很有效,但这似乎是错误的方法,因为我已经读过,我不应该像这样嵌入javascript。此外,我将不得不做很多事情,因为我希望显示许多不同类型的数据,比你在下面看到的更多。因此show.html.erb页面将填充javascript以使应用程序按我希望的方式工作。
问题:如何在不使用javascript的情况下为每个用户的节目页面获取@ user.id到Backbone的fetch函数中。在评论中,有人建议我使用app / assets / javascripts / user.js,但我不知道如何获得<%= @ user.id%>进入该文件。 @ user.id随时可以在show.html.erb
中找到<script type='text/javascript'>
$(document).ready(function() {
app.collections.awardCollection.fetch({ data: $.param({ user_id: <%= @user.id %> }) }).complete(function(){
app.views.awardCollection = new app.Views.awardCollection({ collection : app.collections.awardCollection});
app.views.awardCollection.render()
});
});
</script>
答案 0 :(得分:2)
我看到LuísRamalho和Gon的评论是个不错的选择,但我建议使用以下方法:
答案 1 :(得分:2)
为了理解视图的工作原理,您可以根据需要为视图添加任意数量的扩展,并且它们将由正确的库进行解析。
如果你创建一个像
这样的视图my_view.haml.erb
首先使用ruby(erb)进行解析,然后使用haml进行解析,并以html页面结束。
您可以为j创建许多视图,通常您希望在执行ajax时将其归档,因此您可以结束具有js视图,如:
my_view.js.erb
将解析第一个ruby(所有&lt; %%&gt;标记),它将以纯文本结尾,然后服务器将提供.js文件。但这通常是ajax的常见任务。
如果你需要渲染一个你想要放置一些js的html页面,并且你需要一些ruby代码,我通常做的是将数据放在带有隐藏div的html内容中。
您可以放入任何视图(即使在您的布局上,如果您希望全局可用),例如:
<div id="user_id" style="display: none;"><%= @user.id %></div>
然后在js(或coffeescript或其他)上你可以检查那个div的内容:
<script type="text/javascript">
var user_id = $("#user_id").html();
</div>
当您想要为js文件调试或创建测试时,这非常有用,因为它的普通js并不会引发语法错误。