3

在我的Rails應用程序中,我有一段JavaScript,在我的8個視圖中有2個是完全重複的。 javascript的位置在哪裏?Rails在視圖之間共享javascript

rails應用程序結構將javascript放在app/assets/javascripts中,其中每個模型和application.js文件都有一個js.coffee文件。我將它放在application.js文件中,還是有一種乾淨的方式來在兩個.js目錄之間共享javascript?

感謝

+0

Shioyama提供了一些很好的建議,但如果你還不熟悉如何在JavaScript中構造類結構,那麼你有一些學習要做(儘管coffeescr ipt使這更容易)。 application.js文件充當清單,您可以在其中包含您的JavaScript的目錄。這對你一開始可能會更容易。這一切都取決於你的舒適水平與JavaScript。這可能會有幫助 - 注意require和require_tree:http://guides.rubyonrails.org/asset_pipeline.html – PhillipKregg

+0

對不起,我誤解了這個問題!請考慮我的回答,介紹backbone.js的模塊化代碼,但不能回答這裏提到的具體問題。 –

回答

1

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共享初始化代碼。我爲模型做同樣的事情。

1

什麼我的觀點是保持在資產中的JavaScript和包括它使用javascript_include_tag需要的地方 例如,你已經把公共代碼在assets/mycode.js.cofeee

使用它像這樣在你的HTML在需要

javascript_include_tag('mycode') 

謝謝