Backbone.js Railsで使えるGem

backbone-relationalをJasmineでテストしてみた

投稿日:

github.com/PaulUithol/Backbone-relational

github.com/pivotal/jasmine

前提

Rails3.2でのJasmineの環境構築は

Rails3.2でJasmineをつかってCoffeeScriptをテスト~jasminerice

Backboneのモデルのテストは

Rails3.2でJasmineをつかってBackbone.jsのModelをテストしてみる

 

Backbone.jsでモデル同士の関連性を簡単に実現するというbackbone-relationalを試してみた

サンプルはREADMEに載ってるそのままでユニットテストを作ってその機能を確かめてみる

backbone-relationalの設定

backbone-relationalでは Backbone.RelationalModelを継承する

 

typeは関連性を書く. Backbone.HasOneとかいう書き方と’HasOne’とかいう書き方がある

keyは参照先からの呼び出し方.この場合はpeson.get(‘user’)で関連先のインスタンスが呼び出せる

relationalModelは関連させたいモデル名.Backbone on Railsでは名前空間に注意

reverseRelationは逆からの参照.この場合はuser.get(‘person’)でこちらのインスタンスを呼び出せる.

なので関連先はなにも書かなくてOK

こちらはHasManyな場合、collectionTypeを指定するとHasManyの参照先がそのcollectionになる

そして、逆の参照のkeyを’livesIn’に指定しているので、person.get(‘livesIn’)で関連するHouseを逆に呼び出せる

includeInJSONを指定している なんかよくわかってない

 

*CoffeeScriptとの関係

一般的には継承は、underscoreのextendでやるけど、CoffeeScriptではextendsがあるのでそれを使っている

Backbone on railsもそれを前提にしているし、おおむね問題はない

ただ、backbone-relationalに関しては問題が出る場合があって、READMEの最後に注記がある

回避方法はModel.setup()を実行しておくこと

今回はあえて何も回避策を取らずにテストを進めたけど問題は特に出なかった

もしも、関連するデータが作成されない場合はこれを疑うといいかもしれない

 

テストと機能の説明

まずはHasOneな関係とPesonとUserの関係から

ここではPersonのインスタンスのpaul.get(‘user’)で関連先Userを呼び出して、さらにそのattributeをpaul.get(‘user’).get(‘login’)で呼んでいる

JasmineとBackboneの話になるけど、idを指定したらbeforeEachでこんなエラーが出た

afterEachすればいいのかと思ったけど、ダメだった

こちらはHasManyなPersonとHouseの関係

JSONの比較はtoEqualですよね

ここでやったことをまとめると

  • Houseから関連するPersonのインスタンスを呼び出せる
  • 相互参照してるので、Houseから関連するPersonを呼んで、さらに関連するHouseを呼べばもとの自分が返ってくる
  • もちろん逆にPersonからHouseも呼べる
  • toJSONすれば関連するモデルも含めてgenerateする(設定)
  • fetchRelatedで関連するモデルをfetchできる
  • 関連するモデルやコレクションへの追加や削除を監視するイベントを設定できる

 

今回はまだサーバーとの通信はみてない

-Backbone.js, Railsで使えるGem
-, ,

執筆者:

関連記事

RailsにTwitter Bootstrapのフォームを設定する~simple_form

環境 RailsにTwitter Bootstrapを設定する~twitter-bootstrap-rails github.com/plataformatec/simple_form 目次1 Gem …

no image

Rails3.2でajaxなフォルダツリーを導入する3~dynatree-rails & jQuery UI dialog

  前回 Rails3.2でajaxなフォルダツリーを導入する~dynatree-rails Rails3.2でajaxなフォルダツリーを導入する2~dynatree-rails &nbsp …

Rubyでd3.jsのapiリファレンスの一覧を取得してくる~mechanize

  d3.jsにはlayoutというおおまかに準備されたレイアウトがあって、その中にあるTreeレイアウトを試してみることにした d3.js自身のapiリファレンスが階層構造になっているので …

no image

Rubyからdocxを生成する

    前提 Rubyでdocxをいろいろ分析してみた 変数の仕様~正規表現 いろいろなパターンで試してみた 例えば、こんな文 [crayon-5ba5b175d4c7d08262 …

Rails3.2でリアルタイムメッセージング~Private_pub、Faye

  Railsで簡単に非同期通信ができるPrivate_pubというgemを試した もともとrubyにはFayeという非同期通信ができるgemがあったが、簡単に安全な接続ができる実装を加えた …