Сохраненная коллекция для нескольких представлений элементов: марионетка

У меня есть составное представление с именем QueueItems, а затем itemView для каждого из них в коллекции, которое позволит мне изменять каждый из этих элементов. Каждый элемент должен иметь возможность выбирать из нескольких коллекций тегов, например. Государства, компании и т. д. Проблема в том, что я не уверен, как встроить это в представления отдельных элементов. Я не хочу делать вызов каждый раз, когда есть itemView, поэтому я поместил коллекцию в составное представление. Но возникает моя проблема в том, что я не знаю, как получить к ней доступ, и если бы я знал, как определить, удалось ли ajax вытащить коллекцию.

Мысли, предложения; все полезно. Спасибо!


person Luke James Emery    schedule 05.05.2015    source источник


Ответы (1)


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

App.States = new StatesCollection();
App.States.fetch();

Если вы создали эту коллекцию в своем объекте CompositeView, вы можете передать ее каждому дочернему элементу с помощью параметра childViewOptions.

var QueueItems = Marionette.CompositeView.extend({
  childViewOptions: {
    states: this.states
  },

  initialize: function() {
     this.states = new StatesCollection();
     this.states.fetch();
  }
}

Затем вы можете просто захватить его при инициализации childView.

var QueueItem = Marionette.ItemView.extend({
  initialize: function(options) {
    this.states = options.states;
  }
}

Что касается беспокойства о том, загружены они или нет, вы должны просто добавить прослушиватель в свой ItemView для рендеринга в любое время, когда коллекция синхронизируется или сбрасывается. Затем он будет просто перерисовываться каждый раз, когда вы извлекаете или загружаете коллекцию.

var QueueItem = Marionette.ItemView.extend({
  initialize: function(options) {
    this.states = options.states;
    this.listenTo(this.states, 'sync reset', this.render);
  }
}
person Tyler Marien    schedule 05.05.2015