2014-11-22 40 views
0

在rails中,我有兩個js文件,一個名爲welcome.js,一個名爲about.js。我有相同的代碼。我正在使用require_tree。在application.js中Rails:Javascript運行於一個文件,但不是另一個

welcome.js:

var loadw = function() { 
    console.log("Hello from welcome js!"); 
} 

$(document).ready(loadw); // for regular page load 
$(document).on('page:load', loadw); // for turbolink 

about.js:

var loada = function() { 
    console.log("Hello from about js!"); 
} 

$(document).ready(loada); // for regular page load 
$(document).on('page:load', loada); // for turbolink 

我有兩頁,現在,我的主頁,其中有一個計算器寫了鈣頁在JavaScript中(即js文件也具有$(document).ready函數,如about.js和welcome.js,如果這很重要的話)。當我加載相應頁面時,瀏覽器中控制檯上的JS輸出是:

大號oading主頁:

"Hello from about js!" 

加載計算器頁面:

"Hello from about js!" 
"Hello from welcome js!" 

我的問題是,爲什麼不從welcome.js代碼運行時我加載主頁?我原本想做的事情是添加代碼來突出顯示點擊時的某些按鈕,並且我將這段代碼添加到了welcome.js中,但是除非我加載計算器頁面,否則它不起作用,但是如果我將它放入about.js(按鈕在標題中)。經過幾個小時的試圖調試,我在這裏 - 我刪除了一切,但console.log,它仍然在發生。我是新手,我可能錯過了一些非常簡單的東西。我在辯論是否擺脫require_tree並只在需要的時候加載js文件,然後看看是否能解決問題,但我不應該那樣做,對吧?

回答

0

找出來了......當我加載除calc頁面以外的頁面時(由於這些頁面中缺少元素),我的calc.js中發生了一些錯誤。由於這個錯誤,calc.js(welcome.js)之後的所有js文件都沒有正確加載,但about.js是,因爲它在calc.js之前。

我將此添加到我的application.js

//= stub calculator.js 

然後在我的計算網頁就分別使用javascript_include_tag增加。

然後我得到一個錯誤,說資產不會被服務,除非我把它放在config/initializers/assets.rb中的預編譯列表中,所以我做了,現在它的工作原理。

0

根本不確定,但有時javascript會在分號丟失時感到困惑。由於只執行第一個(按字母順序)函數,它看起來與連接文件的語法有關。

試試你的函數定義之後添加分號,像

var loadw = function() { 
    console.log("Hello from welcome js!"); 
}; 

並重新運行。

相關問題