2013-04-12 90 views
0

我在show.html.erb頁面有以下腳本,以更新我的進度欄。但是它使用jQuery,並且由於jQuery只是在我的application.html.erb佈局的末尾加載,所以我無法在我的頁面上使用它。所以我需要在腳本代碼之前在我的show.html.erb頁面上。將腳本從頁面遷移到Rails中的js文件

很明顯,這是不正確的做法。我應該在哪裏放置我的腳本代碼,以便它爲此頁面加載?另一個問題是它使用來自控制器的信息(@batch)。如果我將它移動到我的資產文件夾中的js文件,我該如何訪問它?

下面的代碼放置在show.html.erb

<%= javascript_include_tag "application" %> 

<script type="text/javascript"> 
function progress(){ 
    var progress = setInterval(function() { 
     var $bar = $('.bar'); 
     var $pct = $('#pct'); 
     $.get("<%= @batch.id %>/status.json", function(data){ 
     if (data.status == "done") { 
      location.reload(); 
     } else { 
      $bar.width(data.progress+"%"); 
      $pct.text(data.progress+"%"); 
     } 
     }); 
    }, 800); 
} 

$(document).ready(function() { 
    $.get("<%= @batch.id %>/status.json", function(data) { 
    if (data.status == "processing") { 
     progress(); 
    } 
    }); 
}); 
</script> 

編輯

年底由於現在我越來越BATCH_ID,我可以檢查它是否存在運行代碼:

$(document).ready(function() { 
    var batch_id = $("#batch").data("batch-id"); 
    if (batch_id != null) { 
    $.get(batch_id + "/status.json", function(data) { 
     if (data.status == "processing") { 
     progress(); 
     } 
    }); 
    } 
}); 

回答

1

處理此問題的方法是通過不顯眼的javascript(單獨您的JavaScript從HTML)。

首先,移動application.html.erb文件的<head>部分中的<%= javascript_include_tag "application" %>,以便它在每個頁面上正確加載jquery。

然後,將您的腳本移動到資產目錄中的js文件中。

要訪問@batch.id,請在您的視圖文件(show.html.erb)的數據屬性中添加此標識。

<div id="etc" data-batch-id="<%= @batch.id %>"></div> 

那麼,你的腳本中:

var batch_id = $("#etc").data("batch-id") 
$.get(batch_id + "/status.json", ... 
+0

是否確定爲代碼在每一頁上運行,即使沒有進度條?或者我應該限制它到我的節目視圖?如果我應該限制它,我該怎麼做? :) –

+0

看來我的編輯解決了這個問題,對吧? ;) –

+1

是的,應該這樣做。關於爲這個單獨的頁面加載jquery ......我不知道最佳做法是什麼。也許值得另一個問題 – mihai