Как сохранить группу выбранных моделей из CollectionView в Backbone Marionette?

0

Я использую Backbone Marionette framework, и у меня есть такая ситуация

Изображение 174551

Здесь каждая строка является моделью, и это коллекция Marionette CollectionView, содержащая коллекцию контактов. Теперь, нажав кнопку "Отправить", пользователь может выбрать столько контактов, сколько захочет, и когда он нажимает "Отправить", я должен позвонить по каждой модели. Так что это лучший способ сделать это.

Прежде всего, я не понимаю, как это сделать. Я знаю, как вызвать save на одной модели. Я искал пару сообщений, но они не предоставляют решение.

  • 1
    поддерживать флаг в модели. когда вы отправляете эту коллекцию для сохранения фильтра по этому флагу.
Теги:
model-view-controller
marionette
backbone.js
backbone.js-collections

2 ответа

2

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

Есть два решения вашей проблемы. Когда событие onSelect запускается пользователем, вы можете либо

1) ничего не делать

2) сохранить ссылку на выбранную модель

Затем, когда происходит событие onSubmit, в зависимости от того, что вы выбрали выше, вы должны

(1) проанализируйте HTML каждого представления в таблице, проверяя, установлен ли флажок "checkbox", и если да, обратитесь к модели с помощью свойства model

(2) или, поскольку вы уже сохранили массив со ссылками на выбранные модели, вы можете просто перебрать этот массив

Где должен находиться код?

Поскольку вы хотите получить доступ ко всем моделям, которые были отображены в пределах Marionette.CollectionView, код, который это делает, должен находиться в указанном Marionette.CollectionView, потому что только у вас есть доступ ко всем этим моделям.

Если вы следуете методу (2), т.е. Сохраняете ссылку на выбранную модель во время события select, этот код должен находиться в марионетке. ItemView соответствующей модели.

Пример решения (2)

var selectedModels = [];

var ItemView = Marionette.ItemView.extend({
    events: {
        'click checkbox': function () {
            selectedModels.push(this.model);
        } 
    }
});

var CollectionView = Marionette.CollectionView.extend({
    itemView: ItemView,
    events: {
        'click .submit': function () {
            _( selectedModels ).invoke(someFunction);
        }
    }
});
0

Вы также можете иметь в виду, когда вы повторяете массив выбранных моделей, что будет хорошей идеей передать весь массив на бэкэнд и отсортировать его там (сохранить каждую модель). Это поможет вам уменьшить количество звонков, которые вы делаете на свой сервер, что сделает пользователь более дружелюбным.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню