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
-, ,

執筆者:

関連記事

Rails3.2+Mongoidでログイン機能~devise

  目次1 Gemfile2 generate3 model4 試す5 Login/Logout6 アクセス制限7 メニュー構成を整える8 翻訳 I18n9 見た目を整える Gemfile …

Railsのテーブル並び替えを実装する

    環境 RailsにTwitter Bootstrapを設定する~twitter-bootstrap-rails 参考 #147 Sortable Lists (revise …

三目並べゲームのAI〜原始モンテカルロ法

By: Luca Galli – CC BY 2.0 目次1 ゲーム用のAI2 シャローコピー3 AI4 勝率 ゲーム用のAI 三目並べのAIを考えてみた. 有効手をリストアップして、おの …

Backbone.jsで関連するモデルのREADとCREATE

By: woodleywonderworks – CC BY 2.0   ThoughtBotの本を読み進めてるけど私には買ってよかったと感じている ゾンビviewのワナを回避す …

Rubyでデータクリーニング~mechanize & active_support

  オライリー・ジャパンから「d3をはじめよう」という本が発売されたので読んだ 棒グラフ、折れ線グラフ、インタラクション(マウスオーバーで丸が大きくなるとかラベル表示とか、横のリストからグラ …