rails new ember -d postgresql
echo "gem 'emberjs-rails'" >> Gemfile
bundle
rails g scaffold todo title done:boolean
rake db:create:all
rake db:migrate
application.js
にemberを追加
//= require jquery
//= require jquery_ujs
//= require ember
//= require_tree .
app/views/todos/index.html.erb
にコード追加
<hr />
<script type="text/x-handlebars" charset="utf-8">
{{view Em.TextField id="new-todo" placeholder="仕事を入力"}}
</script>
サーバを立ち上げましょう。 ブラウザのデーバグツールでElement確認
実際のControllerをつけてみましょう。
<script type="text/x-handlebars" charset="utf-8">
{{view Todos.CreateTodoView id="new-todo" placeholder="仕事を入力"}}
</script>
app/assets/javascripts/todos.js.coffee
に次のコードを追加
Todos = Ember.Application.create()
window.Todos = Todos
Todos.CreateTodoView = Em.TextField.extend
insertNewline: ->
value = @get('value')
alert(value)
ここでブラウザに行けば入力した内容がAlertで出るのを確認できます。
app/assets/javascripts/todos.js.coffee
を修正
Todos.todosController = Em.ArrayProxy.create
content: []
createTodo: (title) ->
todo = Todos.Todo.create(title: title)
@pushObject(todo)
Todos.CreateTodoView = Em.TextField.extend
insertNewline: ->
value = @get('value')
if value
Todos.todosController.createTodo(value)
@set('value','')
TextFieldに適度に入力してデーバクコンソルから確認
Todos.todosController.content
Objectが更新されるのを確認できます。 画面で更新内容を見るためには…
そこで、ServerとDataを連動するにはどうすれば?
application.js
に ember-data
を追加
//= require ember-data
モデルを変更
Todos.Todo = DS.Model.extend
title: DS.attr 'string'
isDone: DS.attr 'boolean'
Todos.Todo.reopenClass
url: "todo"
Todos.store = DS.Store.create
adapter: DS.RESTAdapter.create
bulkCommit: false
revision: 4
コントローラーも変更
Todos.todosController = Em.ArrayProxy.create
content: Todos.store.findAll(Todos.Todo)
createTodo: (title) ->
Todos.store.createRecord(Todos.Todo, title: title)
Todos.store.commit()
元ならゴレで動くはずですが、RailsのJSONがEmberの奴と模様が違うので上手くいかないです。
ここは強気で
gem 設置
gem 'active_model_serializers'
Railsのモデルを変更します。
class TodoSerializer < ActiveModel::Serializer
attributes :id, :done, :title
end
class Todo < ActiveRecord::Base
attr_accessible :done, :title
end
ここでブらウザで確認してみましょう 'ㅅ'/