2012-03-27 18 views
1

私はバックボーンが初めてです。Backbone.jsフレームワークの同じ「クラス」のネストされたモデルですか?

同じタイプのモデルのリストを含むバックボーンでモデルを定義することは可能ですか?例:

MyModel = Backbone.Model.extend({ 
    initialize: function() { 
    nestedMyModels:new Array(); 
    }, 

    addMyModel: function(aModel) { 
    // Code here would push() aModel onto array 
    }, 

    render: function() { 
    // Loop through array calling render() recursively 
    } 
}); 

次に、render()への再帰呼び出しを開始したビューを作成します。例:

MyView = Backbone.View.extend({ 
    render:function() { 
    this.model.render(); 
    } 
}); 

答えて

3

1何ら配列ませんが、コレクション

常にあなたがバックボーンにあるModelsArrayで考えることCollectionに思います。

今、あなたはMyModelsのコレクションを実装し、あなたのに、mymodelインスタンスでの1つのインスタンスを保持している何をすべきか。レンダリング

ため

// code simplified and not tested 
MyModel = Backbone.Model.extend({ 
    initialize: function() { 
    this.nestedMyModels: new MyModels(); 
    }, 

    addMyModel: function(model) { 
    this.nestedMyModels.add(model); 
    } 
}); 

MyModels = Backbone.Collection.extend({ 
    model: MyModel 
}); 

2使用ビューは、常にあなたがrenderで考えることViewに思います。

お勧めの方法は、CollectionModelの方がそれぞれViewの方が良い場合です。この方法では、コレクションのビューは反復でモデルのビューを呼び出します。

// code simplified and not tested 
MyModelView = Backbone.View.extend({ 
    render: function(){ 
    this.$el.html(model.get("name")); 
    var view = new MyModelsView({ collection: this.model.nestedMyModels }); 
    this.$el.append(view.render.el); 

    return this; 
    } 
}); 

MyModelsView = Backbone.View.extend({ 
    render: function(){ 
    this.collection.each(function(model){ 
     var view = new MyModelView({ model: model }); 
     this.$el.append(view.render.el); 
    }); 

    return this; 
    } 
}); 

+0

fguillenありがとうございます。したがって、コレクション内の各モデルに対して新しいビューを使用すると、各モデルは独自のUIイベント(たとえば)に応答できますか? – Jack

+0

明確にするために、私は書かなければなりません: '独自のUIイベントに応答するためのコレクション**の各モデル**インスタンス(例えば)? – Jack

+0

UIイベントは 'Model'ではなく、' View'に関連しているので、それぞれ独自のViewは独自のUIイベントに応答します。あなたのケースでは、**はい**と言うことができますが、** 2つの異なるビュー**が**同じモデル**に関連する特別なケースでは、各ビューは独自のUIイベントを管理します。 – fguillen

0

希望するものはcollectionです。これは基本的にモデルのリストまたは配列です。

0

コレクションは、モデルのセットです。詳細については、こちらをご覧ください。ここでhttp://backbonejs.org/#Collection

は一例です。

var Library = Backbone.Collection.extend({ 
    model: Book 
}); 
+0

この例では、私の質問は、ライブラリコレクションにライブラリコレクションを含めることができるかどうかです。 – Jack

0

は、同じタイプの モデルのリストが含まれていバックボーンでモデルを定義することが可能ですか?

確かに、なぜですか。

var MyModel = Nested.Model.extend(); 

MyModel.define({ 
    defaults : { 
    nestedMyModels : MyModel.Collection 
    }, 

    addMyModel: function(model) { 
     this.nestedMyModels.add(model); 
    } 
}); 

バニラのバックボーンではありません。それにはプラグインが必要です。 https://github.com/Volicon/backbone.nestedTypes

PS:それは他の回答でも言及されているように、レンダリング用にViewを使用する必要があります。モデルではありません。

関連する問題