【问题标题】:How can I render Ruby code in javascript?如何在 javascript 中呈现 Ruby 代码?
【发布时间】:2009-08-07 08:50:22
【问题描述】:

我的视图中有一个 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>

这不行,你能帮帮我吗?

【问题讨论】:

    标签: javascript ruby-on-rails


    【解决方案1】:

    这个脚本不能在 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 =&gt; f[:data_index] } }。更好,更不容易出错。

    祝你好运!

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        首先是查看从页面源生成的代码。那里有任何语法错误吗? Ext 库是否包含在 HTML 的头部某处?

        【讨论】:

          【解决方案4】:

          怎么样:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-08-01
            • 2011-10-01
            • 1970-01-01
            • 2019-06-04
            • 2018-03-27
            相关资源
            最近更新 更多