子视图可以来自多个集合的CompositeView

时间:2015-07-08 21:29:01

标签: javascript backbone.js typescript marionette

简而言之,这就是我所需要的。

我需要展示一个下拉/组合框,其中的孩子可以来自许多收藏品。所有这些系列'模型有一个text属性,我将在下拉列表中显示。

我想知道是否可以从许多馆藏中创建下拉列表。

即:

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>

因此,如果我选择A,我希望能够获得具有Fungus属性的A模型,如果我选择R,我想要具有NumberOfBugs属性的R模型。

这个想法是它们是2个具有共同属性的集合,但在后端对应不同的模型。

有没有办法在Marionette / Backbone中做到这一点?

创建具有多个数据源/集合的下拉列表的某种方式?

合并到一个集合将不起作用,因为同步/获取操作将无法正常工作。

1 个答案:

答案 0 :(得分: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

希望有所帮助