2011-01-26 3 views
1

Я занимаюсь разработкой конфигуратора продукта. Проблема, казалось, заключалась в том, что буквально для каждого продукта есть несколько компонентов, и то, как они взаимодействуют друг с другом, является довольно случайным. Поэтому, если вы измените количество на одну часть, в другом месте его нужно будет настроить автоматически и т. Д.Рельсы, отслеживающие действия Js

Из-за всего этого и того факта, что эти правила часто меняются, я решил сделать их функциями Js, поэтому у меня есть рельсы такие вещи:

<% @counter = 0 %> 
<% @people.each do |p| %> 
<% @counter += 1 %> 
<tr> 
<%= form_for(:p, :remote => true) do |f| %> 
<th><%= f.label(p.name) %></th> 
<th><%= f.label(p.country.name) %></th> 
<th><%= f.label(p.state.name) %></th> 
<th id="<%= "money_" + @counter.to_s %>"> <%= f.select(:money, 1..10, :selected => p.money)%></th> 
<th id="<%= "comment_" + @counter.to_s %>"><%=p.money_comment%></th> 
<% end %> 
<% end %> 

(имена полей здесь случайны)

и у меня есть функция Js в файл, который будет загружаться, например:

function change_people() { 
    money1 = $('money_1').children[0].value; 
    $('comment_2').update((money1 == 5) ? "selected 5!" : 'why not 5?'); 
} 

document.observe('dom:loaded', function() { 
    change_people(); 
    $('money_1').children[0].observe('change', change_people); 
}); 

Так что это работает, я могу изменить значения в зависимости от того, какой пользователь выбрал и т. Д., Но ... вот в чем вопрос. Как рельсы знают об этом? Rails привел количество людей по умолчанию, которое их значения из БД и т. Д., Как мне сказать, какое новое значение есть, если/когда я хочу добавить в корзину?

Большое спасибо!

ответ

0

Возможно, вы захотите отправить значения формы при каждом изменении. Например, если вы используете JQuery, вы могли бы сделать что-то вроде этого:

 
$('.money').change(function(){ $(this).closest('form').submit(); }); 

Этот код говорит, что в любое время ввода с классом «деньги» налаживается, просто представить ближайшую форму (что случается удаленная форма, которую вы определили).

В качестве дополнительного наконечника, вам не нужно следить за счетчиком с явной переменной, как вы в вашем примере кода, вы можете также использовать each_with_index:

 
@people.each_with_index do |p, counter| 
    ... 
end 
+0

Спасибо за ваш ответ Пан. Я до сих пор не понял способ правильно хранить различные диапазоны и опции в db, чтобы рельсы их подбирали. Для значений по умолчанию нет проблем. Но как вы думаете, я должен дать ему эти правила, поскольку явно хранить каждую возможную форму в db слишком много. Чтобы дать вам некоторый фон, на данный момент пользовательский интерфейс - это Excel, а «правила» хранятся в виде строк в db. Когда пользователь выбирает продукт, эти строки (которые являются формулами excel) приводятся, поэтому некоторые элементы становятся динамическими, когда что-то меняется. – Lievcin

+0

Я думаю, это зависит от того, как часто вы хотите настроить эти формулы. Если они очень статичны, вы можете закодировать их непосредственно в javascript и поддерживать это в своей базе кода. Если они часто меняются, вы можете сохранить их в БД и иметь интерфейс администратора для их управления. При загрузке страницы вы можете запросить БД для правил и передать их клиенту. Вы также можете сделать вызов AJAX, когда продукт выбран для загрузки связанных правил из Rails в Javascript. –

+0

Правила часто меняются, а также вводятся новые продукты со своими собственными правилами. Когда вы говорите: «Если они часто меняются, вы можете хранить их в БД и иметь интерфейс администратора для их управления», вы имеете в виду хранить их как код js или как код ruby? – Lievcin

Смежные вопросы