在我的Rails應用程序中,我有一段JavaScript,在我的8個視圖中有2個是完全重複的。 javascript的位置在哪裏?Rails在視圖之間共享javascript
rails應用程序結構將javascript放在app/assets/javascripts
中,其中每個模型和application.js文件都有一個js.coffee文件。我將它放在application.js文件中,還是有一種乾淨的方式來在兩個.js目錄之間共享javascript?
感謝
在我的Rails應用程序中,我有一段JavaScript,在我的8個視圖中有2個是完全重複的。 javascript的位置在哪裏?Rails在視圖之間共享javascript
rails應用程序結構將javascript放在app/assets/javascripts
中,其中每個模型和application.js文件都有一個js.coffee文件。我將它放在application.js文件中,還是有一種乾淨的方式來在兩個.js目錄之間共享javascript?
感謝
UPDATE:
我完全誤解了這個問題,並認爲這是對Backbone.js的看法,並不軌意見。下面的答案實際上與問題有所不同......也許這與使用backbone.js的人有關,但它並不真正回答這個問題。對於那個很抱歉!
原來的答案:
我做的共享代碼是創建一個父類,包括我想在那裏共享,然後讓每個使用它繼承了該類的意見代碼( coffeescript行話)。
因此,像(再次在CoffeeScript中):
應用程序/資產/ Java腳本/ base_view.js.coffee(或任何你想要把它)
class App.BaseView
sharedFunction:() ->
...
然後進行其他視圖擴展App.BaseView
(或任何你調用父類):
應用程序/資產/ Java腳本/視圖/ view2.js.coffee
class App.MyView1 extends App.BaseView
... sharedFunction() ...
應用程序/資產/ Java腳本/視圖/ view2.js.coffee
class App.MyView2 extends App.BaseView
... sharedFunction() ...
只要確保與App.BaseView
文件在application.rb
其他視圖之前加載。 (如果您使用的是require.js,那麼加載順序當然無關緊要,但我假設您不是)
另外值得一提的是,儘管您提到您只是共享「一塊javascript「,從共享模塊的角度來看,最好從頭開始思考,以便如果以後想要擴展那個」一塊javascript「,則有框架來實現它。有關使用backbone.js實現模塊的a good article。
FWIW,this is the project我正在致力於共享共同視圖類的代碼:App.Threads
延伸App.TranslatableFieldsView
其中延伸App.BaseView
。請注意,我使用coffeescript的super
共享初始化代碼。我爲模型做同樣的事情。
什麼我的觀點是保持在資產中的JavaScript和包括它使用javascript_include_tag
需要的地方 例如,你已經把公共代碼在assets/mycode.js.cofeee
使用它像這樣在你的HTML在需要
javascript_include_tag('mycode')
謝謝
Shioyama提供了一些很好的建議,但如果你還不熟悉如何在JavaScript中構造類結構,那麼你有一些學習要做(儘管coffeescr ipt使這更容易)。 application.js文件充當清單,您可以在其中包含您的JavaScript的目錄。這對你一開始可能會更容易。這一切都取決於你的舒適水平與JavaScript。這可能會有幫助 - 注意require和require_tree:http://guides.rubyonrails.org/asset_pipeline.html – PhillipKregg
對不起,我誤解了這個問題!請考慮我的回答,介紹backbone.js的模塊化代碼,但不能回答這裏提到的具體問題。 –