Inserting Javascript dinamically with DOM

I want to do simple stuff. In my controller I have this:

render :update do |page|   page.replace_html 'scripts', :partial => 'scripts', :locals => {:question => @question} end

And in the partial I have this:

<% if question.sound %> Sound loaded!   <script src="/javascripts/soundmanager2-jsmin.js?1264193894" type="text/javascript" />   <script src="/javascripts/soundmanager2-rails.js?1264193894" type="text/javascript" />   <script type="text/javascript">     soundManager.url = '/soundmanager2.swf';     soundManager.debugMode = false;     soundManager.consoleOnly = false;   </script>   <script type="text/javascript">     soundManager.onload = function() {       soundManager.createSound("question_sound", "<%= url_for_file_column('question', :sound) %>");     }   </script> <% end %>

Well, when I run it, the message "Sound loaded!" appears, but the scripts are not rendered (I inspect the elements with Chrome and with Firebug, and the scripts do not appear).

Is there anything wrong when I try to do this? Is there a way to make this work?

Yuri Albuquerque wrote:

I want to do simple stuff. In my controller I have this:

render :update do |page|   page.replace_html 'scripts', :partial => 'scripts', :locals => {:question => @question} end

And in the partial I have this:

<% if question.sound %> Sound loaded!   <script src="/javascripts/soundmanager2-jsmin.js?1264193894" type="text/javascript" />   <script src="/javascripts/soundmanager2-rails.js?1264193894" type="text/javascript" />   <script type="text/javascript">     soundManager.url = '/soundmanager2.swf';     soundManager.debugMode = false;     soundManager.consoleOnly = false;   </script>   <script type="text/javascript">     soundManager.onload = function() {       soundManager.createSound("question_sound", "<%= url_for_file_column('question', :sound) %>");     }   </script> <% end %>

Well, when I run it, the message "Sound loaded!" appears, but the scripts are not rendered (I inspect the elements with Chrome and with Firebug, and the scripts do not appear).

Is there anything wrong when I try to do this? Is there a way to make this work?

Why not just call the script file from a <script> tag instead of replace_html? In general, your JavaScript should be coming from static external files.

Best,

Why not just call the script file from a <script> tag instead of replace_html? In general, your JavaScript should be coming from static external files.

Best, -- Marnen Laibow-Koser http://www.marnen.org marnen@marnen.org

Well, now I tried. I have tried this on my view: <script type="text/javascript">   var q_sound='<%= url_for_file_column('question', :sound) %>'; </script> <script type="text/javascript"> //<![CDATA[ soundManager.onload = function() {   if(q_sound!='') soundManager.createSound("question_sound", q_sound); } //]]> </script>

And this on the controller:

      page << 'soundManager.unload();'       page << "q_sound = '#{url_for_file_column('question', :sound)}';"       page << 'soundManager.load();'

But when I test, it return this error:

  RJS error:

  Error: SoundManager.getSoundById(): sID is null/undefined

I know why this error is ocurring (because soundManager is trying to load q_sound even if it is empty), but I don't know how to solve.

Any tips?

Yuri Albuquerque wrote:

Why not just call the script file from a <script> tag instead of replace_html? In general, your JavaScript should be coming from static external files.

Best, -- Marnen Laibow-Koser http://www.marnen.org marnen@marnen.org

Well, now I tried. I have tried this on my view: <script type="text/javascript">   var q_sound='<%= url_for_file_column('question', :sound) %>'; </script> <script type="text/javascript"> //<![CDATA[ soundManager.onload = function() {   if(q_sound!='') soundManager.createSound("question_sound", q_sound); } //]]> </script>

And this on the controller:

      page << 'soundManager.unload();'       page << "q_sound = '#{url_for_file_column('question', :sound)}';"       page << 'soundManager.load();'

But when I test, it return this error:

  RJS error:

  Error: SoundManager.getSoundById(): sID is null/undefined

I know why this error is ocurring (because soundManager is trying to load q_sound even if it is empty), but I don't know how to solve.

Any tips?

Follow the advice I already gave.

Best,