1

私はバックボーンで足を濡らそうとしていますが、ここで何が問題なのかわかりません:

var  ToDoApp = {
            model: Backbone.Model.extend({
                default:function(){
                    return {
                        task: '',
                        completed:false
                    }
                }
            }),
            collection: Backbone.Collection.extend({
                model: this.model
            }),
            view: Backbone.View.extend({
                model: new this.model(),
                tagName: 'li'
            })
        }
console.log(new ToDoApp.model());

ビューのモデルで「未定義は関数ではありません」と表示されます。どうしたの?
また、ビューにはモデルが必要ですか? 本当に基本的な質問でしたら申し訳ありませんが、私はまだバックボーンがどのように機能するかを完全には理解していません。

4

1 に答える 1

1

この部分:

collection: Backbone.Collection.extend({
    model: this.model
})

ビルド時に実行されますがToDoApp、その時点では実行されthisず、おそらく実行され、プロパティはありません。その結果、あなたは実際に次のように言っています。ToDoAppthiswindowwindowmodel

collection: Backbone.Collection.extend({
    model: undefined
})

ここでも同様の問題が発生します。

view: Backbone.View.extend({
    model: new this.model(),
    tagName: 'li'
})

最も簡単な方法は、少しToDoAppずつビルドすることです。

var ToDoApp = { };
ToDoApp.model = Backbone.Model.extend({ ... });
ToDoApp.collection = Backbone.Collection.extend({
    model: ToDoApp.model
});
ToDoApp.view = Backbone.View.extend({
    tagName: 'li'
});

次に、ビュー インスタンスを作成するときに、ビュー インスタンスのモデルを作成します。

var model = new ToDoApp.model();
var view  = new ToDoApp.view({ model: model });

ToDoApp.Modelまた、「クラス」には、ToDoApp.Collection、 などの名前を使用ToDoApp.Viewする方が一般的です。

于 2013-09-22T22:29:28.917 に答える