2013-04-12 14 views
17

モデルの1つからコレクションへの参照を取得する方法があるのだろうかと思います。例えば、以下のコレクションの中の誰かが何らかの形でコレクションに属していること、または複数のコレクションに気付いている場合などです。 Fiddleバックボーン - モデルからコレクションを取得することが可能

(function() { 
window.App = { 
    Models: {}, 
    Views: {}, 
    Collections: {} 
}; 

App.Models.Person = Backbone.Model.extend({ 
    defaults: { 
     name: 'John', 
     phone: '555-555-5555' 
    } 
}); 

App.Views.Person = Backbone.View.extend({ 
    tagName: 'li', 

    template: _.template("<%= name %> -- <%= phone %>"), 

    render: function(){ 
     var template = this.template(this.model.toJSON()); 

     this.$el.html(template); 

     return this; 
    } 
}); 

App.Collections.People = Backbone.Collection.extend({ 
    model: App.Models.Person 
}); 

App.Views.People = Backbone.View.extend({ 
    tagName: 'ul', 

    add: function(person){ 
     var personView = new App.Views.Person({ model: person }); 

     this.$el.append(personView.render().el); 

     return this; 
    }, 

    render: function() { 
     this.collection.each(this.add, this); 

     return this; 
    } 
}); 


})(); 

var peeps = [ { name: 'Mary' }, { name: 'David' }, { name: 'Tiffany' } ]; 

var people = new App.Collections.People(peeps); 

var peopleView = new App.Views.People({ collection: people }); 

peopleView.render().$el.appendTo('body'); 

答えて

25

各モデルはcollectionというプロパティがあります。あなたのフィドルで、console.log(people.models[0].collection)を追加するとコレクションが印刷されます。

ソースコードを調べると、モデルのdestroy()メソッドが呼び出されたときにコレクションからモデルを削除するようなことがあるようです。

更新:this updated fiddleを参照してください.3人の人物モデルと2つのコレクションが作成されます。コンソールに出力されます。 model.collectionは、人物が追加された最初のコレクションのみを参照し、2番目のコレクションは参照しません。