2012-08-17 74 views
0

我想在將它傳遞給模板之前對其進行排序。我在我看來如何在Backbone中對集合進行排序

CollectionForTelplate : this.Collection 

的渲染功能使用我的取爲

var self = this; 
//fetch done here 
if (Collection.length > 0) { 
    _.each(Collection, function(Model) { 
     JSON.stringify(Model); 
    }, this); 
}; 
self.Collection = Collection; 
self.render; 
  1. 有沒有藉助任何其他方式,而我可以收集傳遞給模板?
  2. 如何根據模型的字符串字段來排序集合,比如Model.name?我試着在集合中編寫一個比較器,並在視圖中排序函數,但不幸的是;它亙古不變的工作對我來說
+0

對不起給出的例子,但與提供的代碼片段,沒有太大的幫助是可能的。在您的代碼中,您沒有將任何收集數據傳遞給模板,您的渲染函數未提供,您的比較器是什麼樣的,........請提供完整的代碼 – schacki 2012-08-17 12:44:08

回答

0

有沒有其他辦法可以通過我可以將該集合傳遞給 模板?

是的,集合的有toJSON() method所以你可以簡單地這樣做

render: function() { 
    this._template({list: this.toJSON()}); //assuming your template is already compiled 
    return this; 
} 

你如何排序基於模型的字符串字段集合,說 Model.name?我試圖在集合中寫一個比較器,並且不幸的是,它不工作,我

您可以簡單地定義在集合comparator功能,它應該保持自身的排序,這裏是在文檔

chapters.comparator = function(chapter) { 
    return chapter.get("page"); 
}; 
1

實現你Collectioncompatarator功能,在docs定義爲

如果定義了一個比較,它會被用來維持有序集合 。

這樣你的收藏就會增加後,會自動保存在一個有序,刪除等,您可以實現它作爲sort

comparator: function(model1, model2) { 
    if (model1 comes before model 2) { 
    return -1; 
    } else if (model1 is equal to model 2) { 
    return 0; 
    } else { // model1 comes after model 2 
    return 1; 
    } 
} 

sortBy

comparator: function(model) { 
    // Return some numeral or string attribute and it will be ordered by it 
    // == smaller numbers come first/strings are sorted into alphabet order 
    return model.get('someAttribute'); 
} 

希望這有助於!

相關問題