如何在javascript中呈现Ruby代码?

时间:2009-08-07 08:50:22

标签: javascript ruby-on-rails

我的视图中有一个javascript部分,我想通过我在帮助器中定义的本地修改。

<script type="text/javascript">
var store = new Ext.data.JsonStore({
    url: '/admin/administration/users/grid_data.json',
    root: 'users',
    fields: [
    <%- for field in fields do -%>
       {name: '<%= field[:data_index] -%>'},
    <%- end -%>
    ]
});
</script>

这不起作用,你能帮助我吗?

4 个答案:

答案 0 :(得分:4)

这个脚本在IE中不起作用,因为它是严格的Javascript解析器。代码中的for循环在数组末尾留下尾随,。这不是一个有效的Javascript语法。将数据从ruby移动到javascript的最简单方法几乎总是to_json:

<% javascript_tag do %>
var store = new Ext.data.JsonStore({
    url: '/admin/administration/users/grid_data.json',
    root: 'users',
    fields: <%= fields.collect{|f| { :name => f[:data_index] } }.to_json %>
});
<% end %>

如果您在Ruby和Javascript中使用相同的哈希键,则可以省略.collect{|f| { :name => f[:data_index] } }。更好,更容易出错。

祝你好运!

答案 1 :(得分:1)

问题是你将有一个尾随逗号。您需要检查字段数组的长度,如果它是最后一个元素,则不要在每个名称参数的末尾包含您当前拥有的逗号。

答案 2 :(得分:0)

首先要看页面源生成的代码。那里有语法错误吗? Ext库是否包含在HTML的head部分?

答案 3 :(得分:0)

怎么样:

<%= (fields.collect {|field| "{name: #{field[:data_index]}}"}).join(',') %>