2

私は非常に単純な ROR (rails 2.3.5) アプリケーションを作成し、jQuery プラグイン jRails を使用しています。アイデアは、rorのコントローラーのリストからランダムなビデオを再生するjQuery youtubeプレーヤーで変更されたランチです。

controller.rb

    def show
    @clip = Video.find(:all, :select =>'link', :order => 'RANDOM()', :limit => 1).map(&:link)
    respond_to do |format|
      format.html 
     end
  end

show.html.erb

<div id="random">
<%=@clip%>
</div>

ここのリンクは、たとえばランダムな youtube リンクです。足の不自由な私への質問は、この jQuery 関数でこの変数を取得する方法ですか?

アプリケーション.js

 $(document).ready(function(){
    $('#player').youTubeEmbed("http://www.youtube.com/watch?v=ZDFlmxmBne8")

});

どんな助けにも非常に感謝します。

4

3 に答える 3

4

Rails コードはそのままにして、jQuery で使用します。

$(document).ready(function(){
  $('#player').youTubeEmbed($('#random').text())
});

アクセシビリティを強化するために、erb を次のように変更します。

<div id="random">
<%=link_to h(@clip), h(@clip) %>
</div>

そしてjs:

$(document).ready(function(){
  $('#player').youTubeEmbed($('#random a').attr('href'));
  $('#random').hide();
});
于 2010-11-28T14:23:12.127 に答える
2

次のように、変数に URL が含まれていると仮定します。

$(document).ready(function(){
    $('#player').youTubeEmbed("<%=escape_javascript(@clip)%>");
});

(申し訳ありませんが、JavaScript が HTML と同じファイルに含まれていなかったという事実を見逃していました。同じようにすべきではありません!)

変数に URL が含まれていると仮定すると、URL を表示したくない場合は、次のようにページ変数に埋め込むことができます ( divshow.html.erb のコードを次のように置き換えます)。

<script type='text/javascript'>
window.myStuff = {
    clipUrl: "<%=escape_javascript(@clip)%>"
};
</script>

...(また

<script type='text/javascript'>
var myStuff = {
    clipUrl: "<%=escape_javascript(@clip)%>"
};
</script>

...これはほとんど同じことです)。

...そして、次のように使用できます。

$(document).ready(function(){
    $('#player').youTubeEmbed(window.myStuff.clipUrl);
});

このように変数の値を出力する場合、書き出されたものが最終的に有効な JavaScript であることを確認する必要があります。たとえば、@clip変数に a"または aが含まれている場合、が に変換され、単独のバックスラッシュが に変換され\ていることを確認する必要があります。Jakub Hampl は、この関数を有益に指摘してくれました。これをコード例に編集しました。"\"\\escape_javascript

これを行うということは、 に新しいシンボルを配置していることを意味しますwindow。新しいシンボルをオブジェクトにしたので、他のものでこれを行う必要がある場合、それらを同じオブジェクトに含めることができるので、シンボルがいたるところに配置されることはありません (多数のグローバル シンボルを作成します。つまり、そのため、windowプロパティ — メンテナンスの問題になる傾向があり、避けるのが最善です)。たとえば、2 つのクリップがあるとします。

<script type='text/javascript'>
window.myStuff = {
    someNiftyClip:      "<%=escape_javascript(@clip)%>",
    someOtherNiftyClip: "<%=escape_javascript(@anotherClip)%>"
};
</script>

トピック外: calling という行youTubeEmbedで、最後にセミコロンを追加したことに注意してください。JavaScript のセミコロン挿入に頼らないことをお勧めします。

于 2010-11-28T14:22:29.543 に答える
0

変数を隠しフィールドに入れ、$('#hiddenFieldID').val(); のような関数で使用できます。

于 2010-11-28T14:22:29.707 に答える