2012-06-23 10 views
0

我在這裏有這個工作代碼。當你調用Collection.create的時候,在.bone中調用Backspace.js的時候,

我之前在下劃線模板中發生了錯誤,而我注意到的是,模型沒有被保存到數據庫,因爲渲染由於模板不好而無法工作。這應該暗示model.save()在渲染後被調用。或者,collections.create()可以完成所有的保存工作,而model.save()根本不會被調用?

模型數據如何通過以下代碼保存在數據庫中?

$(function(){ 
Todos = new TodoList.Collections.Todos; 
TodoList.Views.TodoView = Backbone.View.extend({ 
    tagName: "li", 
    events: {}, 
    initialize: function(){}, 
    template: _.template('<li> <%= task %></li>'), 
    render: function(){ 
     var todo = this.model.toJSON(); 
     //alert("render: " + JSON.stringify(todo)); 
     return this.template(todo); 
    } 
}); 

TodoView = TodoList.Views.TodoView; 

TodoList.Views.AppView = Backbone.View.extend({ 
    el: $("#todo_app"), 
    events: { 
     "submit form#new_todo": "createTodo", 
     "click div.new-todo-btn" : "showFormNew" 
    }, 
    showFormNew: function(){ 
     $(".new-todo-form").toggle(); 
    }, 
    initialize: function(){ 
     _.bindAll(this, 'addOne', 'addAll','render'); 
     Todos.bind("add", this.addOne); 
     Todos.bind("reset", this.addAll); 
     Todos.bind("all", this.render); 
     Todos.fetch(); 
    }, 

    addOne: function(todo){ 
     var view = new TodoView({model: todo}); 
     this.$("#todo_list").append(view.render()); 
    }, 

    addAll: function(){ 
     Todos.each(this.addOne); 
    }, 

    newAttributes: function(event){ 
     var new_todo_form = $(event.currentTarget).serializeObject(); 
     return { 
       'task': new_todo_form["todo[task]"], 
       'done': new_todo_form["todo[done]"] 
     }; 
    }, 

    createTodo: function (e){ 
     e.preventDefault(); 
     var params = this.newAttributes(e); 
     Todos.create(params); 
    } 
}); 
}); 

回答

1

如果你想知道在任何特定的backbone.js方法中發生了什麼,那麼註釋源非常有用。骨幹源非常小,相當容易遵循。

http://documentcloud.github.com/backbone/docs/backbone.html#section-99

你可以看到,Collection.create卻會調用model.save方法,除非模型驗證失敗。

此事件的順序是(如果沒有錯誤):在new_todo形式

  • 用戶填寫並提交。
  • 調用了調用TodoList.create的createTodo方法。
  • Collection.create調用model.save
  • 傳遞給model.save的成功回調會將新模型添加到集合中。
  • add事件觸發集合,導致調用TodoList.addOne方法,從而創建新的TodoView
+0

這有幫助。謝謝。我現在要通過源代碼。 –

1

上述代碼已成功保存模型數據並不完全確定。您未附加到模型上的「同步」事件,該模型在服務器上成功創建模型時調用。如果在保存模型時遇到任何問題,您也不會附加到「錯誤」事件。

Collection.create直接調用Model.save btw。

+0

該代碼工作時未附加同步事件。新項目正在加載到集合中並添加到數據庫中。 –

相關問題