2011-11-23 59 views
16

我正在開發一個業餘愛好應用程序,並使用一些jQuery。結果現在很好,但我是一個jQuery noob,我認爲我可以對代碼結構進行一些重大改進。暫且拋開Coffescript,我一直在想的是如何在資產管道中正確使用特定於型號的.js文件。如何正確使用Rails 3.1資產管道中的jQuery?

例如,在使用我的用戶模型時,我可能會在文檔準備就緒時運行一些代碼。假設我在$(document).ready(function() {...});中輸入了由Rails 3.1生成的users.js文件。

第二天,我正在使用Pet模型,並且我有要運行的文檔準備就緒的代碼。我把它放在Rails準備的pets.js文件的另一個$(document).ready(function() {...});內。

這裏就是我的問題出現了:

  1. 那如何編譯當應用程序運行?
  2. 我用上面的例子實例化兩個jQuery實例嗎?
  3. 我應該只在應用程序中使用$(document).ready(function() {...});還是Rails會將我的代碼編譯爲單個調用?
  4. 什麼屬於型號專用.js文件?
  5. 在開發和生產模式下它將如何執行有什麼區別?

回答

12

1)編譯:Rails assets pipeline只將一個大文件中的所有javascript文件合併在一起。

2)jQuery是隻裝載一次,你有多個$(document).ready功能,但是這是沒有問題的

3)Rails沒有做與呼叫任何東西,和jQuery可以安全地處理更多的每個區塊的頁。

4)您稱之爲特定型號.js,我寧願將其稱爲控制器特定。您將屬於一起的功能組合在一起。將它們聯繫在一起的東西是控制器還是模型真的沒有關係。我們把我們的js分成不同的文件,使它更易於管理。

5)在開發過程中,資產按每個請求進行編譯,在生產中它只進行一次。在生產中它也可以被縮小和壓縮。

希望這會有所幫助。

3

我會嘗試爲你解答其中的一些問題。你只需要每個頁面準備1個文件,但是如果你有多個文件,這並不重要。無論它們包含在哪裏,都將成爲DOM加載到瀏覽器後執行的代碼。 Rails不會對JavaScript做任何不可思議的事情,它會和你在文件中寫的一樣。 Rails不會以時髦的方式編譯JavaScript代碼,對於可能縮小它的生產環境,但實際的代碼將保持大致相同。這由瀏覽器執行 - 不是服務器。

您沒有實例化2個實例,因爲jQuery只加載一次,然後被引用。 $(document).ready()調用僅僅是一個函數,僅此而已。

模型特定的jquery文件可以與Rails應用程序中的Ajax結合使用。所以你可以有像'create.js.erb'這樣的文件,它實際上是一個JavaScript文件,你可以將rails動作傳入。如果你想在創建/刪除後發佈一些特定的代碼,那麼你可以使用這樣的文件來做到這一點,你只需要在你的軌道控制器中響應javascript即可 - 但是這要深入一些,你的意思是上面的問題的外觀。

要記住的主要事情是jQuery只是JavaScript和JavaScript獲取由瀏覽器運行 - 在沒有任何動態集成的前端,將始終運行在客戶端,jquery主要用於DOM操作。

希望這會清除一些東西!

+0

感謝您的額外信息。 – Clay

相關問題