2

所以在我show.html.erb文件ONF控制器我有紅寶石VS在軌

<% content_for :head do %> 
<script type="text/javascript"> 
var filepath= "/flexpaper/" + <%= @exam.filename.to_s %> + ".swf" 

     var flashvars = { 
       SwfFile : escape(filepath), .... 

JS字符串連接現在這似乎是我使用的解決方法解決方案,但是當我試圖實現同樣的結果周圍的其他方法如下

<% content_for :head do %> 
    <script type="text/javascript"> 
    var filepath= <%= "/flexpaper/" + @exam.filename + ".swf".to_s %> 

      var flashvars = { 
        SwfFile : escape(filepath), .... 

即紅寶石產生的文件路徑,而不是JavaScript 我得到了一個未定義錯誤文件路徑。 現在我明白,因爲它沒有得到filepath作爲字符串i.r「東西」,而不是像東西的東西.. 因此逃生錯誤了。 但我不明白爲什麼?有任何想法嗎?

P.s-也對UJS風格的組織提出任何建議。除了這個有點動態的東西之外,我還有其他所有js都駐留在其他文件的某個地方,並且包含在頭文件中。 我不能在包含的js文件中使用ruby代碼,也不想像ryan bates railscast那樣擁有一個javascript控制器來生成這個小腳本。所以其他任何簡單的解決

回答

2

本質上,您在第二個版本中缺少javascript中的引號。 ruby運行後,生成的頁面包含一個純JavaScript腳本標記。該javascript看起來像這樣:

var filepath= /flexpaper/some_exam.swf 
    var flashvars = { 
     SwfFile : escape(filepath), .... 

請注意,您正在爲filepath變量指定一個值,但它沒有被引號包圍。這不是有效的JavaScript。如果你修復它這樣,它應該工作:

<% content_for :head do %> 
    <script type="text/javascript"> 
    var filepath= "<%= "/flexpaper/" + @exam.filename + ".swf".to_s %>"; 
    var flashvars = { 
     SwfFile : escape(filepath), .... 

當我在這,我加了一個分號和固定的縮進 - 你會發現,正確縮進JavaScript代碼使得數量級更容易進行調試。這Ruby代碼會產生的JavaScript,看起來大約是這樣的:

<script type="text/javascript"> 
    var filepath= "/flexpaper/some_exam.swf"; 
    var flashvars = { 
     SwfFile : escape(filepath), .... 

了一個小竅門發現錯誤像這樣在您的瀏覽器做了查看源代碼,並在多數民衆贊成正在生產的JavaScript仔細看。

0

我看到你的代碼中有幾個錯誤,在解決方案中,你錯過了會使某些文本成爲字符串的引號。在第一個,你可以這樣做:

<% content_for :head do %> 
    <script type="text/javascript"> 
    var filepath= "/flexpaper/<%= @exam.filename.to_s %>.swf" 

    var flashvars = { 
      SwfFile : escape(filepath), .... 

而在第二個你缺少整個字符串

<% content_for :head do %> 
    <script type="text/javascript"> 
    var filepath= "<%= "/flexpaper/" + @exam.filename + ".swf".to_s %>" 

     var flashvars = { 
       SwfFile : escape(filepath), .... 
報價