Порядок записи моделей в Spine.js - PullRequest
5 голосов
/ 24 августа 2011

Как я вижу в источниках Spine.js, функция Model.each () возвращает записи модели в порядке их идентификаторов.Это совершенно ненадежно в сценариях, где важен порядок: длинный список людей и т. Д.

Можете ли вы предложить способ сохранить порядок оригинальных записей (в том же порядке, в котором они были получены через refresh () или аналогичные функции)?

PS Ситуация еще хуже, потому что по умолчанию Spine.js внутренне использует новые идентификаторы GUID в качестве идентификаторов.Таким образом, порядок записей является абсолютно случайным, что недопустимо.

РЕДАКТИРОВАТЬ: кажется, что при последнем коммите https://github.com/maccman/spine/commit/116b722dd8ea9912b9906db6b70da7948c16948aони сделали это возможным, но я не проверял это сам, потому что я переключился с Spine на Knockout.

1 Ответ

2 голосов
/ 13 января 2013

Столкнулся с той же проблемой обучения spine.js. Я использую чистый JS, поэтому я пренебрегал примером контакта http://spinejs.com/docs/example_contacts, который помог на этом. На самом деле вы не можете сохранить порядок на сервере таким образом, но вы можете сделать свой собственный порядок с помощью javascript.

Обратите внимание, что я использую Шаблон элемента здесь. (http://spinejs.com/docs/controller_patterns)

Сначала вы устанавливаете функцию, которая будет выполнять сортировку внутри модели:

/*Extending the Student Model*/
Student.extend({

    nameSort: function(a,b) {
        if ((a.name || a.email) > (b.name || b.email)) 
            return 1; 
        else 
            return -1
    }
});

Затем в контроллере студентов вы устанавливаете элементы, используя сортировку:

/*Controller that manages the students*/
var Students = Spine.Controller.sub({

           /*code ommited for simplicity*/

            addOne: function(student){
            var item = new StudentItem({item: student});
            this.append(item.render());
    },

    addAll: function(){
            var sortedByName = Student.all().sort(Student.nameSort);
            var _self = this;
            $.each(sortedByName, function(){_self.addOne(this)});
    },


});   

И это все.

...