Backbone.js коллекция сохраняет новый порядок сортировки?

#jquery #backbone.js #jquery-ui-sortable

#jquery #backbone.js #jquery-ui-сортируемый

Вопрос:

Хорошо, итак, я сортирую группу виджетов панели мониторинга с помощью пользовательского интерфейса jQuery и хотел бы сохранить новый порядок виджетов. Каков наилучший подход к этому? Есть идеи?

Я думал о том, чтобы указать атрибут «порядка» в модели следующим образом:

 widgetsModel: Backbone.Model.extend({
    defaults: {
        name: 'Widget',
        category: 'uncategorized',
        order: '0',
        content: 'No Content'

    },

    initialize: function(i) {
        this.bind("change:name", function() {
            var name = this.get("name");
            console.log('From Model: ' name);
        });

        this.bind('error', function(model, error) {
            alert(error);
        });

    }

})
  

Затем в коллекции у меня есть это:

 widgetsCollection: Backbone.Collection.extend({

    model: mw.models.widgetsModel,

    localStorage: new Store('widgets_' mw.mainTab),

    initialize: function(widget){

        var $this = this;

        _.bind('add', function(widget){
            //console.log(widget.get('name'));
        });

        $('#dash_widget_container').sortable({
            items:'.module_wrap',
            accepts:'.module_wrap',
            handle: '.module_header',
            tolerance: 'pointer',
            revert:true,
            placeholder: "ui-state-highlight"
        });


    },

    nextOrder: function() {
        if (!this.length) return 1;
        return this.last().get('order')   1;
    },

    comparator: function(widgets) {
        return widgets.get('order');
    }

})
  

На данный момент я застрял. Есть идеи?

Ответ №1:

Как насчет сброса WidgetsCollection, а затем возврата WidgetModels в новый порядок.

 console.log(widgetsCollection.models) // => model1, model2, model3
widgetsCollection.reset([model2, model3, model1]);
console.log(widgetsCollection.models) // => model2, model3, model1
  

Вы можете использовать пользовательский интерфейс jQuery для получения нового заказа. Таким образом, они сохраняются по порядку и не требуют дополнительных накладных расходов.

Комментарии:

1. Спасибо, Крик 🙂 Я все еще немного запутался в JS MVC, но это помогает!