0

コレクション内に 2 つの異なるモデルがあります。ビュー内でそれらにアクセスするにはどうすればよいですか? 質問は 2 つの部分に分かれています。質問が明確でない場合はお知らせください。

パート1

モデル1

Movie = Backbone.Model.extend({
     initialize:function(){
         console.log("The model 'Movie' initialized");
     }
});

モデル 2

Songs = Backbone.Model.extend({
     initialize:function(){
          console.log("The model 'Songs' initialized");
     }
});

これらのモデル用に作成されたインスタンスは、次のように配列としてコレクションに追加されます

var movie = new Movie({type:"movie",name:"Lord of the Rings",year:"2006"});
var songs = new Songs({type:"songs",name:"Rahna Thu", artist:"A R Rahman", album:"Delhi-6"});

var entertainment = new Backbone.Collection([movie,songs]);

では、ビュー内でこれらのモデルにアクセスするにはどうすればよいでしょうか? これらのモデルをロードしてテンプレートにバインドするには? 私が正しいかどうかはわかりませんが、私はこのようなことをしました

MainView = Backbone.View.extend({
    collection:entertainment,
    initialize:function(){
        $.each(this.collection.toJSON(),function(i,item){
            if(item.type=="songs"){
                alert("Song: "+item.name+" Artist: "+item.artist+" Album: "+item.album);
            }
        });
    }
});
var mainview = new MainView({el:$('body')});

アラートを正しく受け取っていますが、これが正しい方法であるかどうかを知る必要があります。

第二部

では、質問の 2 番目の部分です。これらのモデルに 'urlRoot' しかない場合はどうなるでしょうか? モデルをプリフェッチしてコレクションを埋めるにはどうすればよいですか?

つまり、私の2番目のシナリオでは、私のモデルは次のとおりです

Movie = Backbone.Model.extend({
     urlRoot:"https://localhost:8080/entertainment/movies"
});

Songs = Backbone.Model.extend({
     urlRoot:"https://localhost:8080/entertainment/songs"
});

では、これらのモデルをコレクションに追加して、ビュー内でアクセスするにはどうすればよいでしょうか?

実際の解決策は、ダッシュボード ページが読み込まれているときに、グリッド、チャート、その他のサーバー側データなどの複数のデータを読み込むことです。これらはすべてページの読み込み時に入力する必要があるため、次のような解決策を考えました。私はここで正しいことをしていますか?または、それを行うより良い方法はありますか?

質問がかなり長くなって申し訳ありませんが、ここで専門家のアドバイスをいただければ幸いです。

4

1 に答える 1

0

バックボーンは、実際には、モデルとコレクションが実際とは異なるように設計されています。コレクションは類似モデルのアグリゲーターである必要があるため、モデルは構造データ指向オブジェクトで類似している必要があります。

アプリは次のようになります。

var Movie = Backbone.Model.extend({ 
    initialize: function() { console.log('movie initialized') });
});

var Song = Backbone.Model.extend({ 
    initialize: function() { console.log('song initialized') });
});

var Movies = Backbone.Collection.extend({ 
    model : Movie,
    url : 'https://localhost:8080/entertainment/movies'
    initialize: function() { console.log('movies collection initialized') });
});

var Songs = Backbone.Collection.extend({ 
    model : Song,
    url : 'https://localhost:8080/entertainment/songs'
    initialize: function() { console.log('songs collection initialized') });
});

MainView = Backbone.View.extend({
    initialize:function(){
        this.entertainment = {
            songs : new Songs(),
            movies : new Movies()
        };
        this.entertainment.songs.each( function(model) {  // Underscore method
             alert("Song: "+model.get('name')+" Artist ...");
        });
    }
});

データベースAPIが破損する(または誤って作成される)ため、1つのコレクションに異なるタイプのモデルを配置しないでください。

于 2012-05-09T18:27:39.007 に答える