50

backbone.js を使用してコレクションのコレクションを作成する方法を理解しようとしています。私はバックボーンにかなり慣れていません。次のような状況があります。

 +---------------+               +------------------+
 | Playlists     |               | Playlist         |
 |---------------|          0..* |------------------|
 |               +-------------->| Name             |
 |               |               |                  |
 |               |               |                  |
 +---------------+               +-------+----------+
                                         |
                                         |
                                         |0..*
                                         v
                                 +------------------+
                                 |  Track           |
                                 |------------------|
                                 | Name             |
                                 | Artist           |
                                 |                  |
                                 +------------------+

コードでは、これは次のようになります。

var trackModel = Backbone.Model.extend({
    //trackdata
});

var playlistModel = Backbone.Collection.extend({
    model : trackModel,
    url   : "playlist"
});

var playlistsModel = Backbone.Collection.extend({
    url   : "playlists",
    model : playlistModel   //This pretty sure doesn't work like I want, because there is no model attribute for collections :S
});

ただし、jsコンソールに次のようなエラーが常に表示されます。

 Uncaught TypeError: Object [object Object] has no method '_validate'

検証をトリガーする関数 (追加、フェッチなど) を実行しようとすると

validateor_validate関数をコレクションまたはモデルのいずれかに追加しても違いはありません。

これは、backbone.js がコレクション内のコレクションをサポートしていないためだと思います。動作する別の方法はありますか?

アップデート:

これが今の姿です

var Track = Backbone.Model.extend({ 
    //trackdata 
}); 

var Tracks = Backbone.Collection.extend({ 
    model:Track; 
}); 

var Playlist = Backbone.Model.extend({ 
    //name  : ...
    tracks: new Tracks ()
}); 

var Playlists = Backbone.Collection.extend({ 
    url : "playlists", 
    model : Playlist 
});
4

1 に答える 1

30

Playlistコレクションからモデルに変えることで問題を解決します。あなたがそれについて考えるならば、Playlistおそらくコレクションに設定できない他の属性(例えば名前)を持っているでしょう。

Playlistsその場合、Playlist(コレクションではなく)モデルのコレクションになり、エラーなしで機能するはずです。

var Track = Backbone.Model.extend({
    //trackdata
});

var Playlist = Backbone.Model.extend({
    model : Track
});

var Playlists = Backbone.Collection.extend({
    url   : "playlists",
    model : Playlist
});
于 2012-04-30T18:16:27.760 に答える