todomvc
Version:
> Helping you select an MV\* framework
92 lines (71 loc) • 2.46 kB
text/coffeescript
class Alfred extends Batman.App
class Alfred.TodosController extends Batman.Controller
constructor: ->
super
routingKey: 'todos'
index: ->
completed: ->
# uses the same template
active: ->
class Alfred.TodosIndexView extends Batman.View
createTodo: (node, event, context) ->
event.preventDefault()
title = node[0].value.trim()
if title
newTodo = new Alfred.Todo(title: title, completed: false)
newTodo.save (err) ->
if not err
node[0].value = null
destroyTodo: (node, event, context) ->
todo = context.get('todo')
todo.destroy (err) -> throw err if err
toggleAll: (node, context) ->
Alfred.Todo.get('all').forEach (todo) ->
todo.set('completed', !!node.checked)
clearCompleted: ->
Alfred.Todo.get('completed').forEach (todo) ->
todo.destroy (err) -> throw err if err
toggleEditing: (node, event, context) ->
todo = context.get('todo')
editing = todo.set('editing', !todo.get('editing'))
if editing
input = document.getElementById("todo-input-#{todo.get('id')}")
input.focus()
disableEditingOnEnter: (node, event, context) ->
node.blur() if Batman.DOM.events.isEnter(event)
# These views get instantiated by name. Extend TodosIndex so they have the same methods.
class Alfred.TodosActiveView extends Alfred.TodosIndexView
class Alfred.TodosCompletedView extends Alfred.TodosIndexView
class Alfred.Todo extends Batman.Model
constructor: ->
super # instantiate the record
# set up some observers on the record's attributes:
if newValue == false
if @get('title').length > 0
else