SlideShare uma empresa Scribd logo
1 de 15
Backbone.jsとSASSでモ 
ジュールをつくった話 
ワンパク道家
前回の話 
• http://yd-niku.holiday/documents/20140822/
前提条件 
• JSはWebpackで結合する 
• commonJSで記述 
• SASS/Compassを利用する(SCSS基本) 
• Ruby on Railsでアプリケーションに組み込む
モジュールの構成 
• app/ 
• view/shared/_mod_slide-show.html.erb 
• index.html.erb 
• frontend_src/ 
• js/shared/_mod_slide-show.js 
• index.js 
• scss/shared/_mod_slide-show.scss 
• index.scss 
• public/ # いろいろ最終的に出力される
組み込みイメージ 
• <!DOCTYOE html> 
• <html> 
• <body> 
• <h1>タイトル</h1> 
• <%= render partial: “/shared/mod_slide-show” %> 
• </body> 
• </html>
_mod_slide-show.html.erb 
• <section class=“mod_slide-show”> 
• <div class=“slide-container”> 
• <article class=“slide-item” /> 
• <article class=“slide-item” /> 
• <article class=“slide-item” /> 
• </div> 
• <nav class=“pagination” /> 
• </section>
_mod_slide-show.scss 
• .mod_slide-show { 
• position:relative; 
• .slide-container { 
• position:absolute; width:2000px; 
• /* left: 150px * n ; */ 
• } 
• .slide-item { 
• display: inline-block; margin-right:20px; width:150px; height:250; 
• } 
• .pagination { } 
• }
_mod_slide-show.js 
• var Backbone = require(‘backbone’); 
• module.exports = Backbone.View.extends({ 
• events: { }, 
• initialize: function () { 
• this.model = new Backbone.Model({ index: 0 }); 
• this.listenTo( this.model, ‘change:index’, this.render); 
• } 
• render: function () { 
• var index = this.model.get(‘index’); 
• var toLeft = index * ( 150 + 20 ); 
• this.$el.find( ‘.slide-container’ ).css({ left : toLeft }); 
• this.$el.find( ‘.pagination li a’ ).index(index).addClass(‘current’) 
• } 
• });
この構成のメリット 
• 構造的に対応関係にあるので見通しが良い 
• 特定のHTMLにスコープをしぼってJSモジュールをかける 
• SMACSSとかBEMと組み合わせやすい
左右ボタンつけたい
_mod_slide-show.html.erb 
• <section class=“mod_slide-show”> 
• <div class=“slide-container”> 
• <article class=“slide-item” /> 
• <article class=“slide-item” /> 
• <article class=“slide-item” /> 
• </div> 
• <nav class=“pagination” > 
• <a class=“btnPrev”>前へ</a> 
• <a class=“btnNext”>次へ</a> 
• </nav> 
• </section>
_mod_slide-show.js 
• var Backbone = require(‘backbone’); 
• module.exports = Backbone.View.extends({ 
• events: { 
• ‘click .btnPrev’ ‘prev’, 
• ‘click .btnNext’ : ‘next’, 
• }, 
• // 中略 
• next : function() { 
• var index = this.model.get(‘index’); 
• this.model.set(‘index’, index +1); 
• }, // prev 中略 
• render: function () { 
• var index = this.model.get(‘index’); 
• // 中略 
• } 
• });
状態管理したい
_mod_slide-show.js 
• var Backbone = require(‘backbone’); 
• module.exports = Backbone.View.extends({ 
• // 中略 
• render: function () { 
• var index = this.model.get(‘index’); 
• // 中略 
• ( index <= 0) ? this.$el.find(‘.btnPrev’).hide() : this.$el.find(‘.btnPrev’).show(); 
• } 
• });
という感じです。

Mais conteúdo relacionado

Mais procurados

backbone.jsの使用例 その1
backbone.jsの使用例 その1backbone.jsの使用例 その1
backbone.jsの使用例 その1
Makoto Haruyama
 
Backbonejs @BuildInsiderOffline #1
Backbonejs @BuildInsiderOffline #1Backbonejs @BuildInsiderOffline #1
Backbonejs @BuildInsiderOffline #1
daisuke shimizu
 
今日から使える! HTML/CSS/JSの シンプルテクニック15選
今日から使える! HTML/CSS/JSの シンプルテクニック15選今日から使える! HTML/CSS/JSの シンプルテクニック15選
今日から使える! HTML/CSS/JSの シンプルテクニック15選
Horiguchi Seito
 
Storyboard
StoryboardStoryboard
Storyboard
Akura Pi
 
Grid application テンプレートを紐解く
Grid application テンプレートを紐解くGrid application テンプレートを紐解く
Grid application テンプレートを紐解く
Kazuhide Maruyama
 

Mais procurados (20)

Javaユーザに伝えたいselenide入門
Javaユーザに伝えたいselenide入門Javaユーザに伝えたいselenide入門
Javaユーザに伝えたいselenide入門
 
backbone.jsの使用例 その1
backbone.jsの使用例 その1backbone.jsの使用例 その1
backbone.jsの使用例 その1
 
まだDOM操作で消耗してるの?
まだDOM操作で消耗してるの?まだDOM操作で消耗してるの?
まだDOM操作で消耗してるの?
 
コンポーネント指向による、Reactのベストプラクティスとバッドプラクティス
コンポーネント指向による、Reactのベストプラクティスとバッドプラクティスコンポーネント指向による、Reactのベストプラクティスとバッドプラクティス
コンポーネント指向による、Reactのベストプラクティスとバッドプラクティス
 
はじめよう Backbone.js
はじめよう Backbone.jsはじめよう Backbone.js
はじめよう Backbone.js
 
XIBで作ったカスタムセルの扱い方
XIBで作ったカスタムセルの扱い方XIBで作ったカスタムセルの扱い方
XIBで作ったカスタムセルの扱い方
 
jQueryを中心としたJavaScript
jQueryを中心としたJavaScriptjQueryを中心としたJavaScript
jQueryを中心としたJavaScript
 
2012年8月10日 勉強会
2012年8月10日 勉強会2012年8月10日 勉強会
2012年8月10日 勉強会
 
Backbonejs @BuildInsiderOffline #1
Backbonejs @BuildInsiderOffline #1Backbonejs @BuildInsiderOffline #1
Backbonejs @BuildInsiderOffline #1
 
Jsのビルド環境
Jsのビルド環境Jsのビルド環境
Jsのビルド環境
 
Progressive Framework Vue.js 2.0
Progressive Framework Vue.js 2.0Progressive Framework Vue.js 2.0
Progressive Framework Vue.js 2.0
 
5分でわかる?Backbone.js ことはじめ
5分でわかる?Backbone.js ことはじめ5分でわかる?Backbone.js ことはじめ
5分でわかる?Backbone.js ことはじめ
 
2時間で学ぶjQuery
2時間で学ぶjQuery2時間で学ぶjQuery
2時間で学ぶjQuery
 
今日から使える! HTML/CSS/JSの シンプルテクニック15選
今日から使える! HTML/CSS/JSの シンプルテクニック15選今日から使える! HTML/CSS/JSの シンプルテクニック15選
今日から使える! HTML/CSS/JSの シンプルテクニック15選
 
Storyboard
StoryboardStoryboard
Storyboard
 
Learning jQuery
Learning jQueryLearning jQuery
Learning jQuery
 
XOOPS and Twitter Bootstrap
XOOPS and Twitter BootstrapXOOPS and Twitter Bootstrap
XOOPS and Twitter Bootstrap
 
React Redux at Eight
React Redux at EightReact Redux at Eight
React Redux at Eight
 
Grid application テンプレートを紐解く
Grid application テンプレートを紐解くGrid application テンプレートを紐解く
Grid application テンプレートを紐解く
 
Backbone.js入門
Backbone.js入門Backbone.js入門
Backbone.js入門
 

Semelhante a Backbone.jsとSASSでモジュールをつくった話

JavaScript + CSS3を活用して スマートフォンサイト/アプリに 動きを付けてみよう
JavaScript + CSS3を活用して スマートフォンサイト/アプリに 動きを付けてみようJavaScript + CSS3を活用して スマートフォンサイト/アプリに 動きを付けてみよう
JavaScript + CSS3を活用して スマートフォンサイト/アプリに 動きを付けてみよう
Hiroaki Wakamatsu
 
パララックスでレスポンシブでJ query mobileなサイトのつくりかた
パララックスでレスポンシブでJ query mobileなサイトのつくりかたパララックスでレスポンシブでJ query mobileなサイトのつくりかた
パララックスでレスポンシブでJ query mobileなサイトのつくりかた
Shumpei Shiraishi
 
CSS Design and Programming
CSS Design and ProgrammingCSS Design and Programming
CSS Design and Programming
Taku AMANO
 
Rails初心者レッスン lesson3 3edition
Rails初心者レッスン lesson3 3editionRails初心者レッスン lesson3 3edition
Rails初心者レッスン lesson3 3edition
Satomi Tsujita
 
Jqm20120210
Jqm20120210Jqm20120210
Jqm20120210
cmtomoda
 
ブラウザにやさしいHTML/CSS
ブラウザにやさしいHTML/CSSブラウザにやさしいHTML/CSS
ブラウザにやさしいHTML/CSS
Takeharu Igari
 

Semelhante a Backbone.jsとSASSでモジュールをつくった話 (20)

React で CSS カプセル化の可能性を考える
React で CSS カプセル化の可能性を考えるReact で CSS カプセル化の可能性を考える
React で CSS カプセル化の可能性を考える
 
HTML5 on ASP.NET
HTML5 on ASP.NETHTML5 on ASP.NET
HTML5 on ASP.NET
 
jQuery Mobile 最新情報 & Tips
jQuery Mobile 最新情報 & TipsjQuery Mobile 最新情報 & Tips
jQuery Mobile 最新情報 & Tips
 
なんでCSSすぐ死んでしまうん
なんでCSSすぐ死んでしまうんなんでCSSすぐ死んでしまうん
なんでCSSすぐ死んでしまうん
 
Magento meet up Tokyo#1 for Design
Magento meet up Tokyo#1 for DesignMagento meet up Tokyo#1 for Design
Magento meet up Tokyo#1 for Design
 
scala+liftで遊ぼう
scala+liftで遊ぼうscala+liftで遊ぼう
scala+liftで遊ぼう
 
JavaScript + CSS3を活用して スマートフォンサイト/アプリに 動きを付けてみよう
JavaScript + CSS3を活用して スマートフォンサイト/アプリに 動きを付けてみようJavaScript + CSS3を活用して スマートフォンサイト/アプリに 動きを付けてみよう
JavaScript + CSS3を活用して スマートフォンサイト/アプリに 動きを付けてみよう
 
「html5 boilerplate」から考える、これからのマークアップ
「html5 boilerplate」から考える、これからのマークアップ「html5 boilerplate」から考える、これからのマークアップ
「html5 boilerplate」から考える、これからのマークアップ
 
パララックスでレスポンシブでJ query mobileなサイトのつくりかた
パララックスでレスポンシブでJ query mobileなサイトのつくりかたパララックスでレスポンシブでJ query mobileなサイトのつくりかた
パララックスでレスポンシブでJ query mobileなサイトのつくりかた
 
XPagesDay2014 A-4 XPages with jQueryMobile BADプラクティスガイド
XPagesDay2014 A-4 XPages with jQueryMobile BADプラクティスガイドXPagesDay2014 A-4 XPages with jQueryMobile BADプラクティスガイド
XPagesDay2014 A-4 XPages with jQueryMobile BADプラクティスガイド
 
Native x Webでいいとこどり開発 ~ピグトーク~
Native x Webでいいとこどり開発 ~ピグトーク~Native x Webでいいとこどり開発 ~ピグトーク~
Native x Webでいいとこどり開発 ~ピグトーク~
 
⑯jQueryをおぼえよう!その2
⑯jQueryをおぼえよう!その2⑯jQueryをおぼえよう!その2
⑯jQueryをおぼえよう!その2
 
jQuery Performance Tips – jQueryにおける高速化 -
jQuery Performance Tips – jQueryにおける高速化 -jQuery Performance Tips – jQueryにおける高速化 -
jQuery Performance Tips – jQueryにおける高速化 -
 
First sass
First sassFirst sass
First sass
 
Asset Pipeline for Perl
Asset Pipeline for PerlAsset Pipeline for Perl
Asset Pipeline for Perl
 
CSS Design and Programming
CSS Design and ProgrammingCSS Design and Programming
CSS Design and Programming
 
Rails初心者レッスン lesson3 3edition
Rails初心者レッスン lesson3 3editionRails初心者レッスン lesson3 3edition
Rails初心者レッスン lesson3 3edition
 
Jqm20120210
Jqm20120210Jqm20120210
Jqm20120210
 
Internet Explorer 10とマイクロソフトにとってのHTML5
Internet Explorer 10とマイクロソフトにとってのHTML5Internet Explorer 10とマイクロソフトにとってのHTML5
Internet Explorer 10とマイクロソフトにとってのHTML5
 
ブラウザにやさしいHTML/CSS
ブラウザにやさしいHTML/CSSブラウザにやさしいHTML/CSS
ブラウザにやさしいHTML/CSS
 

Backbone.jsとSASSでモジュールをつくった話

  • 3. 前提条件 • JSはWebpackで結合する • commonJSで記述 • SASS/Compassを利用する(SCSS基本) • Ruby on Railsでアプリケーションに組み込む
  • 4. モジュールの構成 • app/ • view/shared/_mod_slide-show.html.erb • index.html.erb • frontend_src/ • js/shared/_mod_slide-show.js • index.js • scss/shared/_mod_slide-show.scss • index.scss • public/ # いろいろ最終的に出力される
  • 5. 組み込みイメージ • <!DOCTYOE html> • <html> • <body> • <h1>タイトル</h1> • <%= render partial: “/shared/mod_slide-show” %> • </body> • </html>
  • 6. _mod_slide-show.html.erb • <section class=“mod_slide-show”> • <div class=“slide-container”> • <article class=“slide-item” /> • <article class=“slide-item” /> • <article class=“slide-item” /> • </div> • <nav class=“pagination” /> • </section>
  • 7. _mod_slide-show.scss • .mod_slide-show { • position:relative; • .slide-container { • position:absolute; width:2000px; • /* left: 150px * n ; */ • } • .slide-item { • display: inline-block; margin-right:20px; width:150px; height:250; • } • .pagination { } • }
  • 8. _mod_slide-show.js • var Backbone = require(‘backbone’); • module.exports = Backbone.View.extends({ • events: { }, • initialize: function () { • this.model = new Backbone.Model({ index: 0 }); • this.listenTo( this.model, ‘change:index’, this.render); • } • render: function () { • var index = this.model.get(‘index’); • var toLeft = index * ( 150 + 20 ); • this.$el.find( ‘.slide-container’ ).css({ left : toLeft }); • this.$el.find( ‘.pagination li a’ ).index(index).addClass(‘current’) • } • });
  • 9. この構成のメリット • 構造的に対応関係にあるので見通しが良い • 特定のHTMLにスコープをしぼってJSモジュールをかける • SMACSSとかBEMと組み合わせやすい
  • 11. _mod_slide-show.html.erb • <section class=“mod_slide-show”> • <div class=“slide-container”> • <article class=“slide-item” /> • <article class=“slide-item” /> • <article class=“slide-item” /> • </div> • <nav class=“pagination” > • <a class=“btnPrev”>前へ</a> • <a class=“btnNext”>次へ</a> • </nav> • </section>
  • 12. _mod_slide-show.js • var Backbone = require(‘backbone’); • module.exports = Backbone.View.extends({ • events: { • ‘click .btnPrev’ ‘prev’, • ‘click .btnNext’ : ‘next’, • }, • // 中略 • next : function() { • var index = this.model.get(‘index’); • this.model.set(‘index’, index +1); • }, // prev 中略 • render: function () { • var index = this.model.get(‘index’); • // 中略 • } • });
  • 14. _mod_slide-show.js • var Backbone = require(‘backbone’); • module.exports = Backbone.View.extends({ • // 中略 • render: function () { • var index = this.model.get(‘index’); • // 中略 • ( index <= 0) ? this.$el.find(‘.btnPrev’).hide() : this.$el.find(‘.btnPrev’).show(); • } • });