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でECサイト構築7 デプロイ~spree+apache2+passenger

  前提 Rails3.2のアプリをデプロイ~apache+passenger+postgresql Rails3.2+Apache2+Passenger環境でSSLを使ってみる &nbsp …

Rails3.2でHTML5で取得した位置情報をMongoDBに保存してGoogleMapsでみる~mongoid、gmaps4rails

前提 Rails3.2でhtml5で取得した位置情報をAjaxで住所表示する~geocoder 目次1 Mongoid2 スケルトンを作る3 Gmap4railsのインストール4 とりあえず地図を表示 …

Backbone.jsからjQuery UIのDialogを使う例

Backbone.js楽しくなってきた 部品ごとのクラスをつくって、それに飾りとイベントをつけて、あとは上位部品から呼び出してくっつけるだけ jQuery UIのダイアログの場合は、公式のサンプルだと …

Backbone.jsとjQuery Mobileを一緒に使うためのリンクメモ

  By: Rick Turoczy jQuery Mobileの公式から jQuery Mobile, Backbone.js and Require.js 一例だけどエレガントなのはjQ …

no image

Rails3.2+MongoDBでつくったアプリをheroku+mongoHQにアップしたよ

Stack Overflowはなんでも答えてくれる エラーメッセージをコピーしてググればたいていの答えはStack Overflowで出尽くしている 目次1 Gemfile2 herokuにアプリ作成 …