2015-07-08 1 views
1

Вот что мне нужно в двух словах.CompositeView, где дети могут поступать из нескольких коллекций

Мне нужно показать выпадающий список/combobox, где дети могут поступать из многих коллекций. Все модели этих коллекций имеют текстовый атрибут, который я покажу в раскрывающемся списке.

Мне интересно, можно ли создать выпадающий список из многих коллекций.

А именно:

Collection one has: 
Text: A, Fungus: 9 
Text: B, Fungus: 7 
Text: C, Fungus: 6 

Collection 2 has: 
Text: Q, NumberOfBugs: 8 
Text: R, NumberOfBugs: 9 
Text: S, NumberOfBugs: 7 

список для моего раскрывающегося списка заканчивает тем, как:

<option>A</option> 
<option>A</option> 
<option>A</option> 
<option>Q</option> 
<option>R</option> 
<option>S</option> 

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

Идея состоит в том, что они представляют собой две коллекции с общими атрибутами, но в бэкэнд соответствуют различным моделям.

Есть ли способ сделать это в Marionette/Backbone?

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

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

ответ

1

Если эти коллекции всегда работают вместе в вашем приложении, вы можете сделать их одной коллекцией с самого начала, а затем использовать подколлекции, используя что-то вроде backbone-filtered-collection для пользовательских поведений и синхронизации/выборки: добавленные к подмножеству модели также будут добавлены к общий.

var general = new Backbone.Collection 
var fungus = new FilteredCollection(general) 
var bugs = new FilteredCollection(general) 

fungus.filterBy(function(model){ 
    return model.has('fungus') 
}) 

bugs.filterBy(function(model){ 
    return model.has('numberOfBugs') 
}) 

general.add([ 
    {text: 'A', fungus: 9}, 
    {text: 'B', fungus: 7}, 
    {text: 'C', fungus: 6}, 
    {text: 'Q', numberOfBugs: 8}, 
    {text: 'R', numberOfBugs: 9}, 
    {text: 'S', numberOfBugs: 7} 
    ]) 



// general.length => 6 
// fungus.length => 3 
// bugs.length => 3 

надеюсь, что это помогает

+0

Метод добавь из FilteredCollection занесен в черный список? – jmasterx

+0

@Milo - что вы подразумеваете под «черным списком»? –

+0

@ Мило, извините, мой код был неполным без функций 'filterBy', что теперь должно иметь больше смысла. Обратите внимание, что 'fungus.add' и' bugs.add' являются прокси-серверами 'general.add' и поэтому могут использоваться безразлично – maxlath