LoginSignup
15
16

More than 5 years have passed since last update.

Rails 4 で Knockout.js を利用する手順

Last updated at Posted at 2014-08-11

[2014/08/14追記]
Turbolinks が導入されていると上手く Knockout.js が動かなかったのですが、こちらの方の投稿を参考に Trubolink を無効にしたら動くようになりました。
http://qiita.com/kazz187/items/12737363d62b9c91993c


前提

  • knockoutjs-rails という gem を使います。
  • 今回の環境
    • ローカルの Mac に 構築した Rails 環境に導入しています。
      • OS: Mac OS X 10.9.4 (Mavericks)
      • Ruby: 2.1.2
      • Rails: 4.1.1

導入手順

  • Gemfile に次のように追記。

    gem 'knockoutjs-rails'
    
  • それらを bundle install します。

    $ bundle install --path vendor/bundle
    

    ※ 私の場合は、vendor/bundle に gem を配置しています。適宜、読み替えてください。

  • 次のようにインストールされました。

    スクリーンショット 2014-08-11 18.22.32.png

  • app/assets/javascripts/application.js に次のように追記します。

    app/assets/javascripts/application.js
    //= require knockout
    
  • 以上で導入は完了です。

動作確認

  • 画面をつくって動作確認するために、適当に Scaffold します。

    $ ./bin/rails g scaffold Hoge name:string age:integer
    $ ./bin/rake db:migrate
    
  • Hoge モデル系向けの JavaScript ファイルを編集します(CoffeeScript記法)。

    • 対象ファイルは app/assets/javascripts/hoges.js.coffee です。

      • Konckout.js は 初心者なのですが、CofeeScrpit ファイル毎に即時関数のように書くものなんだろうか..
      • こういう感じで、モデルを Class で定義した方が、すっきりするのかもしれん。
      app/assets/javascripts/hoges.js.coffee
      $ ->
      
        TestappViewModel = ->
          self = this
          self.message = ko.observable("")
          return
      
        ko.applyBindings new TestappViewModel()
        return
      
  • indexページの View も編集します。

    • 対象ファイルは app/views/hoges/index.html.erb です。

      app/views/hoges/index.html.erb
      〜
      
      <br>
      <br>
      <input type="text" data-bind="value: message, valueUpdate: 'afterkeydown'">
      <br>
      <span data-bind="text: message"></span>
      
  • 編集したら、ローカルWEBサーバを起動して、

    $ ./bin/rails s
    
  • ブラウザで http://localhost:3000/hoges にアクセスしてみます。

    スクリーンショット 2014-08-11 19.14.13.png

  • テキストフィールドに文字を入力すると、データバインディングで同じ文字列が下に表示されます。ちゃんと動いているみたいです^^

おわりに

もともと Rails の Viewテンプレート(.erbファイル)に Ruby の制御構文も埋め込めるので、JavaScriptベースのアプリケーションでない限り、フルスタックな JavaScript フレームワークよりも今回のような Knockout.js(とjQuery)ぐらいでちょうどいいのかなあと思いました。もうちょっと試してみます。

15
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
16