首页 文章

Backbone.js集合集合

提问于
浏览
48

我正在试图弄清楚如何使用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'

当我尝试执行一个触发验证的函数(如add,fetch,...)

如果我将 validate_validate 函数添加到任何集合或模型中没有区别 .

我相信这是因为backbone.js不支持集合中的集合 . 还有另一种方法吗?

UPDATE:

这就是它现在的样子

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 
});

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
    });
    

相关问题