rails + Backbone.jsでhaml-jsをテンプレートとして使う方法- Backbone.js - rails- jammit
まずさらっと紹介。
・backbone.js
…クライアントサイドjsにMVCを提供してくれるすんげーライブラリ。railsと相性抜群(っぽい。まだサラっとしか見てません)
railsと連携してルーティングとか使ってみたいので、knockoutjs使ってましたがこっちに切り替えようかなと思ってます。
・jammit
…jsのテンプレートとかcssとかをパッケージングしてくれるライブラリ。backbone.jsのviewテンプレートについて調べてたら出てきました。
Backbone is agnostic with respect to your preferred method of HTML templating. Your render function could even munge together an HTML string, or use document.createElement to generate a DOM tree. However, we suggest choosing a nice JavaScript templating library. Mustache.js, Haml-js, and Eco are all fine alternatives. Because Underscore.js is already on the page, _.template is available, and is an excellent choice if you've already XSS-sanitized your interpolated data.
Backboneのドキュメントより
ってことで、慣れてることもありテンプレートはHaml-jsを使いたいと思います。
まずjammitインストール
# /yourapp/Gemfile gem "jammit"
でbundle
次にjammitが使うテンプレートフォルダと拡張子、javascriptをincludeする際のkeyを指定
# /yourapp/config/assets.yml embed_assets: on #拡張子の追加 template_extension: jst.haml template_function: Haml javascripts: #includeする際のkey workspace: #テンプレートフォルダとファイルマッチ - app/views/**/*.jst.haml
って感じになる思います。
あとはhttps://github.com/visionmedia/haml.js/
をダウンロードしてpublic or vendor下に配置
最後に、ヘッダで先ほど設定したjammitのキーでjsを読み込みます。
- #/yourapp/app/views/layouts/application.html.haml.or.something !!! %html %head = javascript_include_tag "/haml-js/lib/haml.js" = include_javascripts :workspace ...
以上です。
# /yourapp/app/views/some/thing.jst.haml
%h1 hello haml js world
みたいなの書くとjammit君がコンパイルしてくれて
/* /assets/workspace.jst.haml */ (function(){ window.JST = window.JST || {}; window.JST['some/thing'] = Haml('%h1 hello haml js world\n\n'); })();
こんなん生成してくれます。
参考 -
・haml-js,jammit設定方法について
・backboneでのベストなhamltemplateの使い方について - stack overflow
・knockoutjsとbackbone.jsどっちがいいかについて - stack overflow
Backbone seeks to be more a full MVC platform, whereas Knockout.js gives you a foundation to apply MVVM/MVP and go from there.
knockoutjsとbackbone.jsどっちがいいかについて より
辺りが議論呼んでそうですね。
knockoutjs1〜2週間くらい触りましたが*observable*とデータバインドの威力は絶大でした。
データを更新するとUIが自動的に書き換わるのは書いててすげー衝撃的な楽さでした。
ただMVVMに慣れていないせいかデータ定義とメソッドがごっちゃになってしまって、コード量が増えてくるとリファクタに手こずった、というのが第一の感想です。
まだMVVMのアーキテクチャへの理解が深まる前ですが、Backbone.jsも試してみたいと思います。