2015-07-16 2 views
0

Я пытаюсь отобразить коллекцию представлений. Коллекция может представлять собой любой вид марионетки (layoutView, CompositeView, collectionView, ItemView). Когда я пытаюсь выполнить рендеринг, я получаю «объект объекта» для каждого отображаемого представления. Это заставляет меня поверить, что он не знает, какую точку зрения отображать, когда он захватывает один из коллекции. Теперь я начал использовать getChildView() в CollectionView, который предположительно отобразит коллекцию представлений, но я не уверен, как указать тип представления, в котором я хочу, чтобы это был ребенок.Как визуализировать коллекцию различных марионеток Просмотров

Новое в марионетке и в онлайновых ресурсах, кажется, маловероятно (возможно, я искал неправильно?) Я хочу иметь представления в представлениях (подзаголовки? Не нужны дети), но не нужно использовать LayoutView и должны указывать регионы так как количество подзаголовков может меняться, вместо этого просто нужно, чтобы CollectionView отображал коллекцию marionetteView независимо от того, сколько.

Спасибо за ваше время,

+0

Я немного смущен тем, что вы пытаетесь сделать. CollectionView обычно используется для визуализации коллекции моделей с использованием указанного класса View, но вы продолжаете упоминать коллекцию представлений. Какие взгляды? Откуда берутся эти взгляды? Какая указка? Если у вас просто много просмотров, которые вы хотите добавить к элементу DOM, это лучшее решение для этого, чем использование CollectionView, поскольку это предназначено для другой ситуации. – ivarni

+0

Не могли бы вы предоставить какой-либо исходный код? –

+0

Будучи новым для марионетки, я все еще спотыкаюсь о том, что может сделать каркас! Вместо того, чтобы иметь коллекцию моделей, я подумывал о создании коллективной коллекции, в которой хранится несколько MarionetteView.а затем я хотел, чтобы коллекцияView использовала эту коллекцию представлений для рендеринга нескольких дочерних элементов. Случай использования - это столбец с несколькими панелями. Каждая панель имеет баннер и контент. Я бы создал эти панели, а затем добавил в коллекцию. Затем я бы использовал collectionView/compositeView, чтобы пройти коллекцию панелей и отобразить их все. – SegFaultDev

ответ

1

Таким образом, после нескольких дней экспериментирования, полностью оставляя этот подход для других (Does a CollectionView's childView have to be an ItemView?), а затем возвращается к нему. Мне кажется, что я понял это.

Этого подход для гнездования множественного MarionetteView под сбором/составной видом, так что позволяет использовать пример столбца, который может иметь любое количество панелей

Сначала мы создаем коллекцию представлений для столбца

//These exist in the view... 
class PanelView1 extends Marionette.CompositeView 
... 
class PanelView2 extends Marionette.ItemView 
... 


columnPanelCollection = new ColumnPanelCollection([ 
     index: 1, view: PanelView1, data: dataForPanelView1Collection 
    , 
     index: 2, view: PanelView2 , data: null 
    ]) 

Итак, мы создаем коллекцию для столбца (columnPanelCollection), передавая тип, а не экземпляр, MarionetteView, поэтому PanelView1 и PanelView2, в атрибут «view:». Также передавать любые данные, которые просмотра может понадобиться в коллекции в «данных»: атрибут

Теперь мы помещаем коллекцию мы только что создали в CollectionView

columnCollectionView= new ColumnCollectionView(
     collection: columnPanelCollection 
    ) 

в классе ColumnCollectionView, мы используем функцию обратного вызова

getChildView:(model)-> 
    return model.get('view') 

и мы возвращаем атрибут 'view:', который является типом вида, который мы хотим создать, это создаст дочерний вид, основанный на этом типе. Тогда в классе childView в (так PanelView1 или класса PanelView2) можно использовать OnShow обратный вызов и создать коллекцию для этой точки зрения на основе «данных:» приписывать мы предоставили

class PanelView1 extends Marionette.CompositeView 
... 
template: .... 
collection: new PanelDataCollection() 

onShow:(view)-> 
    modelCollection = view.model.get("data").models 
    @collection.reset(modelCollection) if modelCollection 

Sidenote: атрибут коллекции должен еще указывается в классе PanelView, поэтому я инициализирую его как «новый PanelDataCollection()», а затем установите его onShow

Мы можем затем использовать LayoutView и поместить columnCollectionView в один из регионов и показать его.

+0

У вас есть общедоступный пример этого в действии? – jkinz