Todos = SC.Application.create() Todos.Todo = SC.Object.extend title: null isDone: false Todos.todosController = SC.ArrayProxy.create content: [] createTodo: (title) -> todo = Todos.Todo.create { title: title } @pushObject(todo) clearCompletedTodos: -> @filterProperty('isDone', true).forEach(this.removeObject, this) remaining: (-> count = @filterProperty('isDone', false).get('length') ).property('@each.isDone') allAreDone: ((key, value) -> if value? @setEach('isDone', value) value else !!@get('length') && @everyProperty('isDone', true) ).property('@each.isDone') Todos.StatsView = SC.View.extend remainingBinding: 'Todos.todosController.remaining' remainingString: (-> remaining = @get('remaining') if remaining == 1 "#{remaining} item" else "#{remaining} items" ).property('remaining') Todos.CreateTodoView = SC.TextField.extend insertNewline: -> value = @get('value') if value? Todos.todosController.createTodo(value) @set('value', '')