0

ここにこの作業コードがあります。

前にアンダースコア テンプレートにエラーがありましたが、不適切なテンプレートが原因でレンダリングが機能しなかったため、モデルがデータベースに保存されていないことに気付きました。これは、レンダリング後に 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);
    }
});
});
4

2 に答える 2

1

上記のコードがモデル データを正常に保存していることは、まったく確実ではありません。モデルがサーバー上で正常に作成されたときに呼び出されるモデルの「同期」イベントにアタッチしていません。また、モデルの保存に問題がある場合に発生する「エラー」イベントにも接続していません。

Collection.create は Model.save を直接呼び出します。

于 2012-06-23T11:22:08.290 に答える
1

特定の backbone.js メソッドで何が起こっているかを知りたい場合は、注釈付きのソースが非常に役立ちます。バックボーン ソースは非常に小さく、従うのはかなり簡単です。

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

モデルの検証が失敗しない限りCollection.create、メソッドが呼び出されることがわかります。model.save

ここでのイベントのシーケンスは次のとおりです (エラーがない場合)。

  • ユーザーがnew_todoフォームに入力して送信します。
  • TodoList.createcreateTodoを呼び出すメソッドが呼び出されます。
  • Collection.createを呼び出しますmodel.save
  • に渡された成功のコールバックはmodel.save、新しいモデルをコレクションに追加します。
  • addコレクションでイベントが発生し、TodoList.addOne新しい を作成するメソッドが呼び出されますTodoView
于 2012-06-23T11:48:28.600 に答える