0

私は Backbone を初めて使用し、簡単なチュートリアルを行っています。よくわからないエラーが出続けます。これが私のコードです。

(function($) {
    dataModel = new Backbone.Model.extend({
        data: [
        {text: "Google", href: "www.google.com"},
        {text: "Yahoo", href: "www.yahoo.com"},
        {text: "Youtube", href: "www.youtube.com"},
        ]
    });

var View = Backbone.View.extend({
    initialize: function(){
        this.template = $('#list-template').children();
    },
    el: $('#container'),
    events: {
        "click button": "render"
    },
    render: function(){
        var data = this.model.get('data');
        for(var i = 0, l = data.length; i < l; i++){
            var li = this.template.clone().find('a').attr('href', data[i].href).text(data[i].text).end();
            this.el.find('ul').append(li);
        }
    }
});

var view = new View({ model: dataModel });
})(jQuery);

電話this.model.get('data')するとエラーが発生しますTypeError: Object function (){return a.apply(this,arguments)} has no method 'get'。私のエラーを見せてください。ありがとう。

4

3 に答える 3

2

モデルを拡張するときに渡すすべてのプロパティとメソッドは、属性としてではなくプロトタイプに設定されdataModelます。これは、Backboneモデルインスタンスではなく、BackboneModelサブクラスです。この方法でデータプロパティにアクセスする場合は、モデルをインスタンス化して、次の例に示すようにデータがモデル属性として設定される場合と同じように行う必要がありますmodelInstance.datamodelInstance.get('data')

ここでやりたかったのは

var dataModel = new Backbone.Model({ // without the extend!
    data: [
    {text: "Google", href: "www.google.com"},
    {text: "Yahoo", href: "www.yahoo.com"},
    {text: "Youtube", href: "www.youtube.com"},
    ]
});

サブクラスBackbone.Modelクラスではなく、モデルのインスタンスを作成したい場合。Extendメソッドは、コアバックボーンクラス(ビュー、モデル、コレクション、ルーター)をサブクラス化するために使用されます。

于 2012-11-15T11:49:42.920 に答える
0

モデルは 1 つのデータ要素の構造のみを定義します

Model
    defaults:
       text : null
       href : null

必要なのはコレクションです

Collection
    model : Model

その後、 .add を使用してコレクションにデータを設定できます

Collection.add([
    {text: "Google", href: "www.google.com"},
    {text: "Yahoo", href: "www.yahoo.com"},
    {text: "Youtube", href: "www.youtube.com"},
])

コレクションからデータを取得するには、こちらをご覧ください http://underscorejs.org/#collections

それが役に立てば幸い

于 2012-11-15T11:52:55.703 に答える
0

あなたの「dataModel」はモデルの単なる定義です。new dataModel()ビューに渡すときに呼び出して、モデル インスタンスを作成する必要があります。

于 2012-11-15T11:50:55.413 に答える