我的视图中有一个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>
这不起作用,你能帮助我吗?
答案 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(',') %>