在Backbone中,我可以将模型行为添加到集合中吗?

时间:2012-11-14 18:49:19

标签: javascript architecture backbone.js publish-subscribe

如果我有一个对象集合,但也想存储一些关于这些对象的更高级别的信息,是否适合在集合中添加一些模型行为?

在我的情况下,我正在寻找一个应用程序路径的集合,以获得一个名为“curPath”的bool字段。如果它已更改,则集合应设置指示当前页面的标志。这样,外部观察者只需要观察一个字段,而不是路径集合中的每个模型。

这可能是这样的:

var PathModel = Backbone.Model.extend({})
var PathCollection = Backbone.Collection.extend({
  initialize: function(){ this.model = PathModel }
})
// I want to be able to set observable properties on the collection, so...
var PathManager = _.extend(Backbone.Model, PathCollection)

// Then maybe I can do something like this?
PathManager.each(function(pathModel){
  pathModel.on('change:curPath', function(m, value, o){
    // I mean for 'this'.set to point to the instance of the PathManager
    if (value === true){ this.set('curPath', pathModel.get('id')) } 
  }, this)
}, this)

向集合(集合+模型>模型)添加可观察行为是否合适,或者我是否需要在整个事物(模型>集合>模型)中添加包装模型,或者是否还有其他溶液

1 个答案:

答案 0 :(得分:0)

由于Model和Collection上的某些方法具有相同的名称会导致冲突,并且可能会出现更新到Backbone的未来版本的问题,我建议不要使用此模式。而不是这样做创建PathManager类并初始化PathCollection并将其设置为此模型上的路径属性。如果你说的是

var PathManager = Backbone.Model.extend({
    initialize: function() {
        this.paths = new PathCollection();
    }
});

var pathManager = new PathManager();

pathManager.paths.add({ /* new path */ });
pathManager.on('change', doSomething);
pathManager.paths.on('add', doSomethingElse);

我会这样做