Basic Todolist Uncommented

An example of using falcon with a basic, single view, todo list

HTML

<script src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
<script src="http://knockoutjs.com/downloads/knockout-3.0.0.js"></script>
<script src="http://stoodder.github.io/falconjs/scripts/falcon.min.js"></script>
<div id="application"></div>
<template id="todo_list_tmpl">
    <!-- ko if: $view.is_editting_title -->
        <input type="text" data-bind="value: $view.title" />
        <button data-bind="click: $view.saveTitle">Save</button>
    <!-- /ko -->
    <!-- ko ifnot: $view.is_editting_title -->
	    <h3>
            <!-- ko text: $view.title --><!-- /ko -->
	        <a data-bind="click: $view.editTitle">Edit</a>
	    </h3>
    <!-- /ko -->
    <ul class="todo-list" data-bind="foreach: $view.todos">
        <li data-bind="css: {'completed': is_complete}">
            <!-- ko text: text --><!-- /ko -->
            <a data-bind="click: $view.completeTodo">[Complete]</a>
     Fecha:    <input type="text" data-bind="value: $view.title" />
            <a data-bind="click: $view.removeTodo">[X]</a>
        </li>
    </ul>
    <input type="text" data-bind="value: $view.new_todo_text" />
    <button data-bind="click: $view.addTodo">Add</button>
</template>

CSS

a {
    cursor: pointer;
    color: navy;
}

.todo-list {
    padding: 0px;
    margin: 0px;
    list-style: none;
}

.todo-list li.completed {
    color: grey;
    text-decoration: line-through;
}

JavaScript

var Todo = Falcon.Model.extend({
    url: 'todo',

    observables: {
        'text': '',
        'is_complete': ''
    }
});


var Todos = Falcon.Collection.extend({
    model: Todo
});


var TodoListView = Falcon.View.extend({
    url: '#todo_list_tmpl',
    
    defaults: {
        'todos': function() { return new Todos; }
    },
    
    observables: {
        'title': 'Untitled List',
        'is_editting_title': false,
        'new_todo_text': ''
    },
    
    initialize: function(){},

    addTodo: function()
    {
        var todo = new Todo({ text: this.new_todo_text() });
        
        this.todos.append( todo );
        
        this.new_todo_text('');
    },
    
    removeTodo: function(todo)
    {
        this.todos.remove( todo );
    },
    
    completeTodo: function(todo)
    {
        todo.set('is_complete', true);
    },
    
    editTitle: function()
    {
        this.is_editting_title( true );
    },
    
    saveTitle: function()
    {
        this.is_editting_title( false );
    }
});


view = new TodoListView
Falcon.apply(view, "#application");


view.todos.append([
    {'text': 'My First Todo'},
    {'text': 'My Second Todo'},
    {'text': 'My Third Todo'}
]);