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.contentObjectが更新されるのを確認できます。 画面で更新内容を見るためには…
そこで、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ここでブらウザで確認してみましょう 'ㅅ'/