2012-04-19 85 views
0

後的閱讀教程和搜索谷歌我都碰了壁幾天...使用模型篩選/排序集合中的Backbone.js的

我創建Backbone.js的使用有一個應用程序具有各種視圖的項目模型/項目集合以顯示項目。該應用的一部分將允許用戶創建組(並使用現有組)來顯示Items Collection的子集。

將會有一個包含各種視圖的組模型/組集合,以顯示組並允許用戶將項目與特定組相關聯。

問題是,每個項目可以屬於一個,很多或不屬於任何組,我無法弄清楚如何使用組模型來根據項目與其關聯的項目集合獲取子集,或者這甚至是正確的方式去做。

任何幫助真的很感謝!

回答

3

取決於你實際擁有多少個模型,你將在哪裏存儲它們,以及它們如何在UI中呈現將取決於你如何着手解決這個問題。

如果有很多模型存儲在遠程服務器上的數據庫中,並且組的項目將分別渲染,那麼一種方法是按需加載組的項目。也許像...

var Item = Backbone.Model.extend({}); 
var ItemColleciton = Backbone.Collection.extend({ 
    url: '/load-items', 
}); 

var Group = Backbone.Model.extend({ 
    items: new ItemCollection(), 
    initialize: function() { 
    // load the groups items as the group is initialized 
    this.items.fetch({data:{groupID:this.id}}); 
    } 
}); 

或者,如果你有較少的車型,大家不妨來加載它們一次全部,並使用過濾來填充組。像這樣...

var Item = Backbone.Model.extend({}); 
var ItemColleciton = Backbone.Collection.extend({ 
    url: '/load-groups', 
}); 

var Group = Backbone.Model.extend({ 
    initialize: function() { 
    // load the groups items as a subset of the already loaded group collection 
    this.items = new ItemCollection(allItems.filter(function(item) { 
     return item.GroupID = this.id; 
    }, this)); 
    } 
}); 

// in your router init ... 
var allItems = new ItemCollection(); 
allItems.fetch(); 

以上只是示例方法。我在使用骨幹一段時間後發現,它的解釋真的很開放,可以用不同的方式解決不同的問題。

您也不妨查看backbone relational。我自己並沒有使用它,但相信它增加了對模型和集合之間映射關係的支持。

+0

我最終根據你的建議使用了一個稍微不同的實現。再次感謝! – dSquared 2012-05-16 21:31:07