Как я могу представить код Ruby в JavaScript? - PullRequest
1 голос
/ 07 августа 2009

У меня есть часть 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 ]

4 голосов
/ 07 августа 2009

Этот скрипт не будет работать в 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 %>

И вы можете опустить .collect{|f| { :name => f[:data_index] } }, если вы используете один и тот же ключ хеша в Ruby и Javascript. Гораздо приятнее и гораздо менее подвержен ошибкам.

Удачи!

1 голос
/ 07 августа 2009

Проблема в том, что у вас будет запятая. Вам нужно проверить длину вашего массива полей, и, если это последний элемент, просто не включайте запятую, которая у вас есть в конце каждого параметра имени.

0 голосов
/ 07 августа 2009

А как же:

<%= (fields.collect {|field| "{name: #{field[:data_index]}}"}).join(',') %>
0 голосов
/ 07 августа 2009

Первым делом посмотрите на сгенерированный код из исходного кода страницы. Есть ли синтаксические ошибки? Есть ли библиотека Ext где-то в разделе заголовка HTML?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...