0

これはコードを見れば簡単に説明できると思うので、Rails3.2で通常どのようにAjaxを実行するかを示すスニペットをいくつか投稿します。

以下が機能します。

create.js.coffee

$("<%= raw j(render(partial: @comment, locals: { str: 'string' })) %>")
  .appendTo("ul#comments")

_comment.html.haml

-puts "The variable's value is #{str}"
%li= comment.what

ここで、上記と同じことを行いたいのですが、JS文字列リテラルを渡す代わりに、次のようにオブジェクトリテラルを渡します。

create.js.coffee

obj = 
  'v1': 'value'
  'v2': 'value'

$("<%= raw j(render(partial: @comment, locals: { o: obj })) %>")
  .appendTo("ul#comments")

もちろん、これは次の理由で失敗します: ActionView :: Template :: Error(未定義のローカル変数またはメソッド `obj'.. ..

誰かが私がやろうとしていることを達成する方法を知っていますか?それは可能ですか?私がやろうとしていることが正気でないかどうか、そしてその場合の適切な方法は何かを教えてください。

ありがとう!

4

1 に答える 1

0

リモーティングを行うまでは、クライアントオブジェクトはサーバーオブジェクトと共有されていないと思います。したがって、この場合、JSオブジェクトをJSONまたはその他の文字列形式(XMLまたはその他の構造)にシリアル化してから、Rubyオブジェクトで逆シリアル化するか、手動で文字列を解析して提供された情報を使用する必要があります。

于 2012-06-15T15:01:06.360 に答える