Как сортировать коллекции в backboneJs

Я изучаю BackboneJs, используя документацию и книгу под названием "Начинающий магистраль". Но я застрял в сортировочной коллекции на несколько часов. Также пытался исследовать, но я нахожу результаты сложными =/

Я знаю, что должен использовать компаратор, как показано в документации, но я не понимаю, как применить его к текущему синтаксису кода

http://backbonejs.org/

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');

1 ответ

Решение

Это рабочее решение, оно отсортирует все по заголовкам. чтобы отсортировать что-либо еще, просто измените параметр функции ge t внутри функции компаратора

    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');   
Другие вопросы по тегам