diff --git a/examples/todos/index.html b/examples/todos/index.html index 8052866..aec0f8c 100644 --- a/examples/todos/index.html +++ b/examples/todos/index.html @@ -24,5 +24,6 @@

todos

Part of TodoMVC

+ \ No newline at end of file diff --git a/examples/todos/todos.js b/examples/todos/todos.js deleted file mode 100644 index 7b8ba43..0000000 --- a/examples/todos/todos.js +++ /dev/null @@ -1,228 +0,0 @@ -// An example Backbone application that uses a Firebase adapter to persist -// Backbone models. Based on a project by Jérôme Gravel-Niquet (http://jgn.me/). - -// Load the application once the DOM is ready, using `jQuery.ready`: -var Todos; - -$(function(){ - - // Todo Model - // ---------- - - // Our basic **Todo** model has `title`, `order`, and `done` attributes. - var Todo = Backbone.Model.extend({ - - // Default attributes for the todo item. - defaults: function() { - return { - title: "empty todo...", - done: false - }; - }, - - // Ensure that each todo created has `title`. - initialize: function() { - if (!this.get("title")) { - this.set({"title": this.defaults().title}); - } - }, - - // Toggle the `done` state of this todo item. - toggle: function() { - this.set({done: !this.get("done")}); - } - - }); - - // Todo Collection - // --------------- - - // The collection of todos is backed by *Firebase*. - var TodoList = Backbone.Firebase.Collection.extend({ - - // Reference to this collection's model. - model: Todo, - - // Save all of the todo items in a Firebase. - firebase: new Firebase("https://backbone.firebaseio.com"), - - // Filter down the list of all todo items that are finished. - done: function() { - return this.filter(function(todo){ return todo.get('done'); }); - }, - - // Filter down the list to only todo items that are still not finished. - remaining: function() { - return this.without.apply(this, this.done()); - } - }); - - // Create our global collection of **Todos**. - Todos = new TodoList; - - // Todo Item View - // -------------- - - // The DOM element for a todo item... - var TodoView = Backbone.View.extend({ - - //... is a list tag. - tagName: "li", - - // Cache the template function for a single item. - template: _.template($('#item-template').html()), - - // The DOM events specific to an item. - events: { - "click .toggle" : "toggleDone", - "dblclick .view" : "edit", - "click a.destroy" : "clear", - "keypress .edit" : "updateOnEnter", - "blur .edit" : "close" - }, - - // The TodoView listens for changes to its model, re-rendering. Since there's - // a one-to-one correspondence between a **Todo** and a **TodoView** in this - // app, we set a direct reference on the model for convenience. - initialize: function() { - this.listenTo(this.model, 'change', this.render); - this.listenTo(this.model, 'remove', this.remove); - }, - - // Re-render the titles of the todo item. - render: function() { - this.$el.html(this.template(this.model.toJSON())); - this.$el.toggleClass('done', this.model.get('done')); - this.input = this.$('.edit'); - return this; - }, - - // Toggle the `"done"` state of the model. - toggleDone: function() { - this.model.toggle(); - }, - - // Switch this view into `"editing"` mode, displaying the input field. - edit: function() { - this.$el.addClass("editing"); - this.input.focus(); - }, - - // Close the `"editing"` mode, saving changes to the todo. - close: function() { - var value = this.input.val(); - if (!value) { - this.clear(); - } else { - this.model.set({title: value}); - this.$el.removeClass("editing"); - } - }, - - // If you hit `enter`, we're through editing the item. - updateOnEnter: function(e) { - if (e.keyCode == 13) this.close(); - }, - - // Remove the item from the collection. - clear: function() { - Todos.remove(this.model); - } - - }); - - // The Application - // --------------- - - // Our overall **AppView** is the top-level piece of UI. - var AppView = Backbone.View.extend({ - - // Instead of generating a new element, bind to the existing skeleton of - // the App already present in the HTML. - el: $("#todoapp"), - - // Our template for the line of statistics at the bottom of the app. - statsTemplate: _.template($('#stats-template').html()), - - // Delegated events for creating new items, and clearing completed ones. - events: { - "keypress #new-todo": "createOnEnter", - "click #clear-completed": "clearCompleted", - "click #toggle-all": "toggleAllComplete" - }, - - // At initialization we bind to the relevant events on the `Todos` - // collection, when items are added or changed. Kick things off by - // loading any preexisting todos that might be saved in *Firebase*. - initialize: function() { - this.input = this.$("#new-todo"); - this.allCheckbox = this.$("#toggle-all")[0]; - - this.listenTo(Todos, 'add', this.addOne); - this.listenTo(Todos, 'reset', this.addAll) - this.listenTo(Todos, 'all', this.render); - - this.footer = this.$('footer'); - this.main = $('#main'); - }, - - // Re-rendering the App just means refreshing the statistics -- the rest - // of the app doesn't change. - render: function() { - var done = Todos.done().length; - var remaining = Todos.remaining().length; - - if (Todos.length) { - this.main.show(); - this.footer.show(); - this.footer.html(this.statsTemplate({done: done, remaining: remaining})); - } else { - this.main.hide(); - this.footer.hide(); - } - - this.allCheckbox.checked = !remaining; - }, - - // Add a single todo item to the list by creating a view for it, and - // appending its element to the `