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

執筆者:

関連記事

TwitterBootstrapとGoogle Code Prittifyでうまくハイライトされないらしい

no image

RailsでRedisを使う例のメモ

最近よく見かけるようなのでメモ Redisって大量にメモリを積んでないとダメかと思ってたけど、思ったよりいろんな方面に用途がありそう(リンク先の情報はわたしは未検証です) Redisの基礎 (全14回 …

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

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

WindowsのRubyでxlsxファイルにアクセスする~roo

By: Hajime NAKANO – CC BY 2.0 目次1 rooのインストール2 rooを使ってみる(基本)3 シートを指定する4 セルの値を確認する5 行列を数える rooのイ …

Rails4でMarkdownをリアルタイムプレビュー〜backbone-on-rails&marked.js

By: Kool Cats Photography over 2 Million Views – CC BY 2.0 目次1 前回2 サンプルアプリ3 Gemfile4 generate5 …