SlideShare une entreprise Scribd logo
1  sur  44
Télécharger pour lire hors ligne
RailsでKnockout.js
逸見 誠(@mako_wis)
自己紹介
• 逸見 誠(へんみ まこと)
• Twitter:@mako_wis
• 株式会社クレオフーガ
• フロントエンド/iOSアプリエンジ
ニア
近況
・Knokout.js + .Net MVCでお仕事
・フットサルしてます
勉強会スタッフ
岡山Ruby, Ruby on Rails勉強会(雑用)
Okayama.rb(イベント作成係)
中国地方DB勉強会(雑用)
オープンセミナー岡山(会計・雑用)
アジェンダ
Knockout.jsとは
Railsに導入してみる
使うと楽できる所
使ってみた感想
Knockout.jsとは
主な特徴
※日本語ドキュメントから引用
エレガントな依存トラッキング
- データモデルが変更される度に、UIの関連付けられた部分を更新し
ます。
宣言型 バインディング
- データモデルとUIを関連付ける、シンプルで明確な方法です。複雑な
動的UIも、バインディング・コンテキストを階層化させることで簡単に
作成できます。
拡張が容易
- 新たなバインディングの仕組みを実装することも、最小限のコード量
で実現できます。
その他のメリット
※日本語ドキュメントから引用
純粋な JavaScript ライブラリである
- サーバサイド, クライアントサイドの技術を選びません。
既存のWebアプリケーションにも投入できる
- アーキテクチャに大きな変更を必要としません。
コンパクト 
- gzip圧縮済みであればおよそ13KB程度です。
その他のメリット
※日本語ドキュメントから引用
メインストリームのブラウザをサポート
- ( IE6以降, Firefox2以降, Chrome, Safari 等 )
ビヘイビア駆動開発に向いている
- ビヘイビア駆動開発(テストコードが仕様書と
ほぼ同義となる開発手法)を用いて、新しいブラ
ウザやプラットフォームでの動作検証を簡略化す
ることができます。
とりあえず使ってみよう
Railsに導入してみる
導入方法
・JSファイルをダウンロードして追加
・gemを使う
今回はgemを使います
knockoutjs-rails
・JSファイルをダウンロードして追加
・gemを使う
これで使える・・・
と思ったら罠が
Rails4そのままだと動かない
原因は・・・
_人人人人人人人_
> turbolinks <
 ̄Y^Y^Y^Y^Y^Y ̄
Rails4デフォルトで動かない
・どうやらturbolinksが原因っぽい
・turbolinksとknockoutが競合してる?
・turbolinksを無効にすると動きます
さようならturbolinks
これで使える
導入方法まとめ
・プロジェクトにknockoutを追加
・turbolinksを無効にする←大事!
使うと楽できる所
入力値を同期したい
入力値を同期する
%input(type="text" data-bind="value: message")

%br

%span(data-bind="text: message")
$ ->

TestappViewModel = ->

self = this

self.message = ko.observable("Hello World!!")

ko.applyBindings new TestappViewModel()

return
coffescript
haml
デモ
クリックに対して何かしたい
クリックでカウントアップ
%span(data-bind="text: numberOfClicks")

回クリックしました

%button(data-bind="click: incrementClickCounter")

クリックしてください
$ ->

TestappViewModel = ->

self = this
self.numberOfClicks = ko.observable(0)
self.incrementClickCounter = ->

previousCount = this.numberOfClicks()

this.numberOfClicks(previousCount + 1)


ko.applyBindings new TestappViewModel()

return
coffescript
haml
デモ
配列に入ってるデータを表示
配列のデータを出力
%ul(data-bind="foreach: users")

%li

%span(data-bind="text: name”)
:
%span(data-bind="text: type")
$ ->

TestappViewModel = ->

self = this
self.users = ko.observableArray([

{ name: "太郎", type: "長男" },

{ name: "二郎", type: "次男" },

{ name: "花子", type: "長女" }

]);


ko.applyBindings new TestappViewModel()

return
coffescript
haml
デモ
詳しい情報は
日本語ドキュメントで
http://kojs.sukobuto.com/
実際使ってみてどうなの?
個人的にいいなと思ってる所
・画面周りの制御に特化してる
・CSSの付け替え、表示切り替えが楽
・Javascript用のクラスを付けなくていい
・Webフレームワークの領域と喧嘩しない
まとめ
Knockout.js便利!
プロジェクトにも入れやすい
まだCSSの
切り替えで消耗してるの?
ぜひ使ってみてください
おわり
はまり所
・2重バインドでエラー
・否定の場合は()が必要
多重バインドでエラー
%ul(data-bind="foreach: users")

%li

%span(data-bind="text: name”)
:
%span(data-bind="text: type")
$ ->

TestappViewModel = ->

self = this
self.users = ko.observableArray([

{ name: "太郎", type: "長男" },

{ name: "二郎", type: "次男" },

{ name: "花子", type: "長女" }

]);


ko.applyBindings new TestappViewModel()

return
coffescript
haml

Contenu connexe

Tendances

Tendances (15)

僕の Serverless web application
僕の Serverless web application僕の Serverless web application
僕の Serverless web application
 
The seminar of asp.net at 201908 sakurug
The seminar of asp.net at 201908 sakurugThe seminar of asp.net at 201908 sakurug
The seminar of asp.net at 201908 sakurug
 
コミュニティと自分
コミュニティと自分コミュニティと自分
コミュニティと自分
 
Cocoa勉強会関西 #55 MagicalRecordでCore Dataをシンプルにする
Cocoa勉強会関西 #55 MagicalRecordでCore DataをシンプルにするCocoa勉強会関西 #55 MagicalRecordでCore Dataをシンプルにする
Cocoa勉強会関西 #55 MagicalRecordでCore Dataをシンプルにする
 
Yapc2012ltthon
Yapc2012ltthonYapc2012ltthon
Yapc2012ltthon
 
Web forms made easy (with formative)
Web forms made easy (with formative)Web forms made easy (with formative)
Web forms made easy (with formative)
 
Azure Functionsでサーバーレスアプリケーション構築
Azure Functionsでサーバーレスアプリケーション構築Azure Functionsでサーバーレスアプリケーション構築
Azure Functionsでサーバーレスアプリケーション構築
 
さわってみようReact.js、AngularJS(1系、2系)
さわってみようReact.js、AngularJS(1系、2系)さわってみようReact.js、AngularJS(1系、2系)
さわってみようReact.js、AngularJS(1系、2系)
 
RubyとRのおいしい関係
RubyとRのおいしい関係RubyとRのおいしい関係
RubyとRのおいしい関係
 
Shinjuku.rb #29 ActiveJobでSQS使ったのとその永続化についての話
Shinjuku.rb #29 ActiveJobでSQS使ったのとその永続化についての話Shinjuku.rb #29 ActiveJobでSQS使ったのとその永続化についての話
Shinjuku.rb #29 ActiveJobでSQS使ったのとその永続化についての話
 
Slack Appsでやれる事を確認した。年内日本語化されるんで、急ぎで!
Slack Appsでやれる事を確認した。年内日本語化されるんで、急ぎで!Slack Appsでやれる事を確認した。年内日本語化されるんで、急ぎで!
Slack Appsでやれる事を確認した。年内日本語化されるんで、急ぎで!
 
Alibaba Cloud Serverless Kubernetes 徹底解説
Alibaba Cloud Serverless Kubernetes 徹底解説Alibaba Cloud Serverless Kubernetes 徹底解説
Alibaba Cloud Serverless Kubernetes 徹底解説
 
Farmnoteの技術(AWS Cloud Roadshow 2014 札幌)
Farmnoteの技術(AWS Cloud Roadshow 2014 札幌)Farmnoteの技術(AWS Cloud Roadshow 2014 札幌)
Farmnoteの技術(AWS Cloud Roadshow 2014 札幌)
 
RailsのRailから解放される始めの一歩
RailsのRailから解放される始めの一歩RailsのRailから解放される始めの一歩
RailsのRailから解放される始めの一歩
 
Sprocketsを捨てたい
Sprocketsを捨てたいSprocketsを捨てたい
Sprocketsを捨てたい
 

Similaire à RailsでKnockout.js

JavaEdge第3回ライブセッション
JavaEdge第3回ライブセッションJavaEdge第3回ライブセッション
JavaEdge第3回ライブセッション
Yoichiro Tanaka
 
090821 Ruby Sapporo Night Ruby Cocoa
090821 Ruby Sapporo Night Ruby Cocoa090821 Ruby Sapporo Night Ruby Cocoa
090821 Ruby Sapporo Night Ruby Cocoa
Tomoki Maeda
 
DSL駆動によるクラウド・アプリケーション開発
DSL駆動によるクラウド・アプリケーション開発DSL駆動によるクラウド・アプリケーション開発
DSL駆動によるクラウド・アプリケーション開発
Tomoharu ASAMI
 
【アジャイル道場】Rails勉強会(view編)
【アジャイル道場】Rails勉強会(view編)【アジャイル道場】Rails勉強会(view編)
【アジャイル道場】Rails勉強会(view編)
Sosuke Kimura
 
AWS CloudFormationによるInfrastructure as Codeの実現
AWS CloudFormationによるInfrastructure as Codeの実現AWS CloudFormationによるInfrastructure as Codeの実現
AWS CloudFormationによるInfrastructure as Codeの実現
HIRA
 

Similaire à RailsでKnockout.js (20)

オープンキャンパス体験授業20150802
オープンキャンパス体験授業20150802オープンキャンパス体験授業20150802
オープンキャンパス体験授業20150802
 
Going Serverless, Building Applications with No Servers
Going Serverless, Building Applications with No ServersGoing Serverless, Building Applications with No Servers
Going Serverless, Building Applications with No Servers
 
Rails×React×TS で作るwebアプリ入門【weseek tech conf #10】
Rails×React×TS で作るwebアプリ入門【weseek tech conf #10】Rails×React×TS で作るwebアプリ入門【weseek tech conf #10】
Rails×React×TS で作るwebアプリ入門【weseek tech conf #10】
 
Railsのフロントエンド開発を考える
Railsのフロントエンド開発を考えるRailsのフロントエンド開発を考える
Railsのフロントエンド開発を考える
 
LocalStack
LocalStackLocalStack
LocalStack
 
フロントエンド技術の変遷
フロントエンド技術の変遷フロントエンド技術の変遷
フロントエンド技術の変遷
 
React.js + Flux
React.js + FluxReact.js + Flux
React.js + Flux
 
JavaEdge第3回ライブセッション
JavaEdge第3回ライブセッションJavaEdge第3回ライブセッション
JavaEdge第3回ライブセッション
 
Mvc conf session_1_osada
Mvc conf session_1_osadaMvc conf session_1_osada
Mvc conf session_1_osada
 
JavaScript(AngularJS・React.js)で作る iOS・Androidアプリハンズオン
JavaScript(AngularJS・React.js)で作る iOS・AndroidアプリハンズオンJavaScript(AngularJS・React.js)で作る iOS・Androidアプリハンズオン
JavaScript(AngularJS・React.js)で作る iOS・Androidアプリハンズオン
 
090821 Ruby Sapporo Night Ruby Cocoa
090821 Ruby Sapporo Night Ruby Cocoa090821 Ruby Sapporo Night Ruby Cocoa
090821 Ruby Sapporo Night Ruby Cocoa
 
DSL駆動によるクラウド・アプリケーション開発
DSL駆動によるクラウド・アプリケーション開発DSL駆動によるクラウド・アプリケーション開発
DSL駆動によるクラウド・アプリケーション開発
 
Next Language Scala
Next Language ScalaNext Language Scala
Next Language Scala
 
JavaFX + NetBeans環境におけるJenkinsの活用(Jenkins第六回勉強会)
JavaFX + NetBeans環境におけるJenkinsの活用(Jenkins第六回勉強会)JavaFX + NetBeans環境におけるJenkinsの活用(Jenkins第六回勉強会)
JavaFX + NetBeans環境におけるJenkinsの活用(Jenkins第六回勉強会)
 
Ruby on Rails を用いたWEBアプリケーションの開発
Ruby on Rails を用いたWEBアプリケーションの開発Ruby on Rails を用いたWEBアプリケーションの開発
Ruby on Rails を用いたWEBアプリケーションの開発
 
【アジャイル道場】Rails勉強会(view編)
【アジャイル道場】Rails勉強会(view編)【アジャイル道場】Rails勉強会(view編)
【アジャイル道場】Rails勉強会(view編)
 
AWS CloudFormationによるInfrastructure as Codeの実現
AWS CloudFormationによるInfrastructure as Codeの実現AWS CloudFormationによるInfrastructure as Codeの実現
AWS CloudFormationによるInfrastructure as Codeの実現
 
2022_1210_WordpressMeetup.pdf
2022_1210_WordpressMeetup.pdf2022_1210_WordpressMeetup.pdf
2022_1210_WordpressMeetup.pdf
 
Monadic Programmingのススメ - Functional Reactive Programmingへのアプローチ
Monadic Programmingのススメ - Functional Reactive ProgrammingへのアプローチMonadic Programmingのススメ - Functional Reactive Programmingへのアプローチ
Monadic Programmingのススメ - Functional Reactive Programmingへのアプローチ
 
Dev campjpn day2session3
Dev campjpn day2session3Dev campjpn day2session3
Dev campjpn day2session3
 

Plus de Makoto Henmi

Plus de Makoto Henmi (8)

若者が勉強会に参加しない問題
若者が勉強会に参加しない問題若者が勉強会に参加しない問題
若者が勉強会に参加しない問題
 
開発フローを改善した時の昔話
開発フローを改善した時の昔話開発フローを改善した時の昔話
開発フローを改善した時の昔話
 
Joinsが使えなかった話
Joinsが使えなかった話Joinsが使えなかった話
Joinsが使えなかった話
 
24時間コンテストに参加した話
24時間コンテストに参加した話24時間コンテストに参加した話
24時間コンテストに参加した話
 
Sassでちょっと楽しよう
Sassでちょっと楽しようSassでちょっと楽しよう
Sassでちょっと楽しよう
 
紙と鉛筆で設計しよう
紙と鉛筆で設計しよう紙と鉛筆で設計しよう
紙と鉛筆で設計しよう
 
岡山のRuby勉強会(OSC広島2013)
岡山のRuby勉強会(OSC広島2013)岡山のRuby勉強会(OSC広島2013)
岡山のRuby勉強会(OSC広島2013)
 
Rhodes
RhodesRhodes
Rhodes
 

RailsでKnockout.js