2014-03-25 49 views
0

即時學習BackboneJs使用文檔和一本名爲「Beginning backbone」的書。 但我一直堅持排序收集部分數小時。 還試圖研究,但我覺得複雜的結果=/如何對主幹中的集合進行排序

我知道我必須使用比較,如在文檔中,但我不知道如何將它應用到當前的代碼語法明智

http://backbonejs.org/#Collection-comparator

var Book = Backbone.Model.extend({ 
    defaults: 
    { 
     title: "default title", 
     author: "default author", 
     pages: 20 
    }, 
    comparator: function(item) 
    { 
     //sort by title 
     return item.get('title'); 
    } 
}); 

var book1 = new Book({ title:"Book of wonders",author:"author1",pages:1 }); 
var book2 = new Book({ title:"Zelda",author:"author2",pages:2 }); 
var book3 = new Book({ title: "Drake's out", author: "author3",pages:3}); 
var book4 = new Book({ title: "AutoCad",author: "author4",pages: 4}); 

var Library = Backbone.Collection.extend({ 
    model: Book 
}); 

var library = new Library([book1,book2]); 
library.add([book3,book4]); 

library.forEach(function(model){ 
    console.log('Book is called '+model.get("title")); 
}); 

console.log('Library contains '+library.length+' books'); 

回答

0

這是一個可行的解決方案,它將按標題排序一切。 通過別的排序,它只是改變get函數的參數比較函數內部

var Book = Backbone.Model.extend({ 
     defaults: 
     { 
      title: "default title", 
      author: "default author", 
      pages: 20 
     } 
    }); 

    var book1 = new Book({ title:"Book of wonders",author:"author1",pages:1 }); 
    var book2 = new Book({ title:"Zelda",author:"author2",pages:2 }); 
    var book3 = new Book({ title: "Drake's out", author: "author3",pages:3}); 
    var book4 = new Book({ title: "AutoCad",author: "author4",pages: 4}); 

    var Library = Backbone.Collection.extend({ 
     model: Book, 
     initialize: function() 
     { 
      console.log("new collection"); 
     }, 
     comparator: function(a,b) 
     { 
      //sort by title 
      return a.get('title') < b.get('title') ? -1 : 1; 
     } 
    }); 

    var library = new Library([book1,book2]); 
    library.add([book3,book4]); 

    library.sort(); 
    library.forEach(function(model){ 
     console.log('Book is called '+model.get("title")); 
    }); 

    console.log('Library contains '+library.length+' books'); 
+0

你錯過了'a.get(「標題」)== b.get(「標題」)'在這種情況下,你的'比較器'應該返回零,因爲它最終會使用標準的['Array.prototype.sort'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort)方法。 –

+0

我必須把它放在比較器的第一行嗎? – user254883

+1

你只需要覆蓋三種情況:'a_title == b_title','a_title b_title';那些應該分別返回0,-1和1。無論你想要的條件安排條件。 –

相關問題