背景 :(怠け者ですが、依然として以下の質問にスキップしてみてください)私は1対多の関係を持つモデルノードを持っていますそれ自体(すなわち、木)と一緒に。私はユーザーがツリー全体で作業できるページを持っていたいと思います。私は、JSONを使ってJavaScriptのオブジェクトとしてツリーをお送りします:多くのモデルインスタンス:JSONとAJAX(on Rails)
tree = <%= raw @node.to_json(:include => :nodes) %>
ノードのプロパティに対応するフィールドを持つフォーム(名前、位置、日付など)があること。私の質問は、上記のすべてのノードで作業できるように、このフォームを作成する最善の方法は何ですか?
ノードを選択するための何らかのウィジェットが必要です。簡単にするために、<a>
の数だけを考えてみましょう。
明らかに、選択したノードのデータをフォームに入力するにはjavascriptが必要です。 <a>
要素にjavascriptを付けてフォームにJSONデータを入力するにはどうすればよいですか?
<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' } %>
を使用して呼び出すか、多分私が横断することにより、クライアント側で<a>
Sを構築するためにはJavaScriptを使用することができます。たとえば、私は、再帰的な部分_write_node.html.erbを持つことができますtree
これは上のhackish文字列の連結を避けるでしょうか?
function loadNodeIntoForm(node) {
document.getElementById('node[name]').value = node.name;
document.getElementById('node[date]').value = date.name;
//etc.
}
次に、フォームの編集時にJSONオブジェクトを更新するjavascriptも用意されています。
質問:最後に、AJAXを使用してフォームを使用せずにオブジェクトを保存するにはどうすればよいですか?たとえば、保存する前に複数のノードを編集できるようにしたいので、現在編集されているノードのみを送信するフォーム上でajaxを使用することはできません。単にjsonオブジェクトをPOSTすることは可能ですか?
to_json(:include =>:nodes)は1つのレベルしか認識しません。私は手動でより多くを指定することができるように見えますが、おそらくツリー全体を行うために関数や部分を書く必要がありますか? – Saucerful
私はおそらくJQuery.ajax()を使用して、カスタムajax呼び出しを作成するsaveNode(node)メソッドを作成していると思いますが、質問2に進む方法はありますか?認証について心配する必要はありますか? – Saucerful