backbone-railsを触ってみた
backbone-railsを触ってみたのでメモです。
https://github.com/codebrew/backbone-rails
インストール
bakcbone-railsはrailsの3.1系で使えます。
railsのプロジェクトを作り、Gemfileに以下を記述します。
gem rails-backbone
あとはbundle install
bundle install
準備
使い始める前に準備が必要です。
rails g backbone:install
blogという名前でプロジェクトを作った場合、以下のようにファイルが生成されます。
├── javascripts │ ├── application.js │ └── backbone │ ├── blog.js.coffee │ ├── models │ ├── routers │ ├── templates │ └── views
models、routersなどの各フォルダは空です。
生成されたblog.js.coffeeを見れば、どのようなネームスペースを意図しているのかわかります。
window.Blog =
Models: {}
Collections: {}
Routers: {}
Views: {}
scaffold
rails側とbackbone側のscaffoldを実行することで、とりあえずbackbone.jsを使ったCRUD操作がすぐできるようになります
rails g scaffold Post title:string content:string rails g backbone:scaffold Post title:string content:string
backbone:scaffoldではmodel、routers、templates、viewsの下に必要なファイルが生成されます。
以下はRouterの例です。
class Blog.Routers.PostsRouter extends Backbone.Router
initialize: (options) ->
@posts = new Blog.Collections.PostsCollection()
@posts.reset options.posts
routes:
"/new" : "newPost"
"/index" : "index"
"/:id/edit" : "edit"
"/:id" : "show"
".*" : "index"
newPost: ->
@view = new Blog.Views.Posts.NewView(collection: @posts)
$("#posts").html(@view.render().el)
index: ->
@view = new Blog.Views.Posts.IndexView(posts: @posts)
$("#posts").html(@view.render().el)
show: (id) ->
post = @posts.get(id)
@view = new Blog.Views.Posts.ShowView(model: post)
$("#posts").html(@view.render().el)
edit: (id) ->
post = @posts.get(id)
@view = new Blog.Views.Posts.EditView(model: post)
$("#posts").html(@view.render().el)きれいに整理されているので勉強になります。
あとはdb:migrateして、posts/index.htmlを修正し、backbone.jsの初期処理を行わせます
<div id="posts"></div> <script type="text/javascript"> $(function() { // Blog is the app name window.router = new Blog.Routers.PostsRouter({posts: <%= @posts.to_json.html_safe -%>}); Backbone.history.start(); }); </script>
先日触ってみたbrunchもそうですが、ある程度枠組みを決めてくれるのでとっつきやすいと思います。
とくにscaffoldで動くコードが生成されるのがよいです。