2012-11-14 41 views
1

如果我有一個對象集合,但也想存儲有關這些對象的更高級別的信息,那麼向集合添加一些模型行爲是否合適?在Backbone中,我可以將模型行爲添加到集合中嗎?

在我的情況下,我正在尋找一個應用程序路徑的集合,使其具有一個名爲'curPath'的布爾字段。如果更改,集合應設置一個標誌來指示當前頁面。這樣,外部觀察者只需觀察一個領域,而不是路徑集合中的每個模型。

這裏有可能是什麼樣子:

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) 

它是適當的觀察行爲添加到集合(集合+模型>模型),或者我需要一個包裝模型添加到整個事情(模型>集合>模型),還是有一些其他的解決方案?

回答

0

由於一些模型及收集方法有,將導致衝突和可能出現的問題與更新到骨幹網的未來版本可能會出現我會建議對這種模式相同的名稱。相反,這樣做會創建一個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); 

什麼,我會做這樣的事情

+0

PathManager是一個模型。 「路徑」應該是通過get/set方法訪問/設置的屬性,而不是對象本身的屬性?或者他們已經(骨幹無知)?不是說有什麼優勢無論哪種方式,我理解(例如,我不認爲改變事件不會火是它的get/set屬性)。我只是想弄清楚什麼是正常的做法? – zod

+0

我建議不要把它作爲一個模型屬性,而保持其作爲一個屬性作爲示例所示。 如果您想窩集/模型的屬性,我建議你閱讀更多關於關係插件骨幹,以確保適當的同步和這樣。 –

相關問題