2012-06-20 54 views
1

我有一個模型entree只是instanciates在其他的CoffeeScript文件中的類,這些一個CoffeeScript的文件:爲什麼Rails資產不能在模型之間隔離?

jQuery(document).ready -> 
    ch = new CepageHandling 
    ch.handleKeyPress() 

handlePress功能捕獲的控制keyup事件。

我有另一個模型vin我想要啓用相同的功能。我很驚訝地發現我不需要做任何事情(它已經有相同的html),它已經在工作,即使vin模型的咖啡標是完全空的。我認爲即使當我不在這個頁面上時,爲entree創建的javascript也會被調用。

我見過與scss文件相同的行爲,其中爲一個模型定義的樣式在描述符匹配時被應用於其他模型。有人可以解釋(或指向一些文章),如果這是正常的行爲資產不是孤立的軌道?我真的很難掌握它的工作原理。

回答

1

默認的清單文件(application.js等)做require_tree .它將加載所有頁面上的所有文件,在生產中將它們全部連接在一起,等等。如果你想讓事情被隔離,你需要在你的測試中ready處理程序在某些情況下跳過此代碼,或者您需要更多的清單(例如,不使用application.js)來隔離每頁的代碼。我建議你非常仔細地閱讀asset pipeline Rails Guide的每一個字...需要閱讀!

+0

我已閱讀過,但我必須承認我可能已經跳過了關於此的部分。謝謝! – Antoine

+0

通常對於一個複雜的應用程序,你會發現你不僅僅需要一個清單。開始時只需對body id進行測試就行了,但是當你得到一個真正的應用程序時,你可能需要爲網站的不同區域('billing.js','billing.css', 'admin.js'等等)。 – rfunduk

1

這是因爲清單文件的的application.js,更精確地在這行代碼:

//= require_tree . 

這意味着包含的/資產中的所有的.js文件/javascripts/文件夾將被加載到您的意見。
由於您的entree.js已經加載並且使用了JQuery文檔準備功能,它會在您的所有視圖中搜索文件規則。
這意味着包含此元素的所有頁面都將獲得相同的行爲。

相關問題