Putting ExtJS 4 into Rails 3.1's asset pipeline
ExtJS 4’s MVC architecture organizes
source files in the following structure so that its Ext.Loader
class can
dynamically fetch and load the necessary Javascript files at runtime.
- app/
- controller/
- model/
- store/
- view/
- app.js
In a Rails 3.1 application, you can place the above structure under the
app/assets/javascripts
directory and package it as a monolithic
Javascript asset using Rails 3.1’s asset pipeline by adding the
following snippet to the app/assets/javascripts/application.js
file:
//= require_tree ./app/model
//= require_tree ./app/store
//= require_tree ./app/view
//= require_tree ./app/controller
//= require app
Next, add an .erb
extension to the app/assets/javascripts/app.js
file
and then register the packaged ExtJS 4 MVC components by adding the
following snippet to the app/assets/javascripts/app.js.erb
file:
Ext.application({
<% Dir[File.expand_path('../app/*/', __FILE__)].each do |subdir| %>
<%= File.basename(subdir) %>s: <%=
# omit all file extensions (js, js.erb, etc.) from the file name
Dir[subdir + '/*.js*'].map {|f| File.basename(f)[/^[^.]+/] }.to_json
%>,
<% end %>
// ... the rest of your ExtJS 4 application definition goes here ...
});
You now have ExtJS 4’s MVC architecture in Rails 3.1’s asset pipeline. :-)
Note that, during development, the asset pipeline caches the result of
rendering the app/assets/javascripts/app.js.erb
file in memory. As a
result, if you add new files to or remove existing files from the
app/assets/javascripts/app/
directory tree, then you must either (1)
modify the public/javascripts/app.js
file and reload your browser or (2)
restart your Rails application (web server) to force the asset pipeline to
render and cache the new output.