Справочная информация : (Если вы ленивы, но все еще хотите помочь, попробуйте просто перейти к вопросу ниже) У меня есть модельный узел с отношениями один-ко-многим с самим собой (то есть дерево).Я хотел бы иметь страницу, где пользователь может работать со всем деревом.Я отправлю дерево в виде объекта javascript, используя JSON:
tree = <%= raw @node.to_json(:include => :nodes) %>
Будет форма с полями, соответствующими свойствам узла (имя, позиция, дата и т. Д.).Мой вопрос: каков наилучший способ построить эту форму, чтобы я мог работать со всеми вышеупомянутыми узлами?
Мне понадобится какой-то виджет для выбора узла.Для простоты, скажем, это просто набор <a>
s.
Очевидно, что мне понадобится JavaScript, чтобы заполнить форму данными выбранного узла.Как мне затем присоединить JavaScript к элементам <a>
, чтобы заполнить форму данными JSON?Например, у меня может быть рекурсивный частичный _write_node.html.erb:
<a onclick="loadNodeIntoForm("<%=str%>)">node.name</a>
<% for i in 0..node.nodes.size %>
<%= render :partial => 'write_node', locals => { :node => node.nodes[i], :str => str + '.nodes[' + i.to_s + ']' } %>
<% end %>
, который я вызываю с использованием
<%= render :partial => 'write_node', locals => { :node => @node, :str => 'tree.node' } %>
Или, возможно, я мог бы использовать JavaScript для построения <a>
sна стороне клиента, пройдя через tree
, что позволило бы избежать хакерской конкатенации строк выше?И я думал что-то вроде
function loadNodeIntoForm(node) {
document.getElementById('node[name]').value = node.name;
document.getElementById('node[date]').value = date.name;
//etc.
}
Тогда у меня также будет JavaScript, который будет обновлять объекты JSON при редактировании формы.
Вопрос: Наконец, какя могу использовать AJAX для сохранения объектов без использования формы?Например, я хочу, чтобы пользователь мог редактировать несколько узлов перед сохранением, поэтому я не могу просто использовать ajax в форме, которая будет отправлять только отредактированный в данный момент узел.Можно ли просто POST-объект JSON?