首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Backbone Collection with multiple models?

Backbone Collection with multiple models?
EN

Stack Overflow用户
提问于 2013-01-11 01:29:22
回答 4查看 11.2K关注 0票数 13

我正在学习Backbone。

我想创建一个列表,其中可以包含不同的模型,具有不同的属性。

例如,以任意顺序列出文件夹内容,其中可能包括类型为file的模型和类型为文件夹的模型。

代码语言:javascript
复制
file : {
  title : "",
  date : "",
  type : "",
  yaddayadda : ""
}

folder : {
  title : "",
  date : "",
  haminahamina : ""
}

在Backbone中表示这一点的正确方式是什么?可以有多个型号的单个集合吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-01-11 01:47:24

创建您的其他模型继承的基础模型:

代码语言:javascript
复制
var DataModel = Backbone.Model.extend({
    // Whatever you want in here
});

var FileModel = DataModel.extend({
    // Whatever you want in here
});

var FolderModel = DataModel.extend({
    // Whatever you want in here
});

并将集合的model类型设置为相同的基模型:

代码语言:javascript
复制
var DataCollection = Backbone.Collection.extend({
    model: DataModel
});
票数 26
EN

Stack Overflow用户

发布于 2014-07-27 15:45:13

你也可以用主干的方式来做。查看文档backbone collection

基本上,您将创建不同的模型,添加一个平局断路器属性,在本例中为"type“。

代码语言:javascript
复制
var file = Backbone.Model.extend({
        defaults: {
            // will need to include a tie breaker attribute in both models
            type: 'file'
        }
    }),
    folder = Backbone.Model.extend({
        defaults: {
            // tie breaker
            type: 'folder'
        }
    });

var fs = Backbone.Collection.extend({
    model: function(model, options) {
        switch(model.type) {
            case 'file':
                return new file(model, options);
            case 'folder':
                return new folder(model, options);
        }
    }
});

// after that just add models to the collection as always
new fs([
    {type: 'file',name: 'file.txt'},
    {type: 'folder',name: 'Documents'}
]);
票数 17
EN

Stack Overflow用户

发布于 2016-02-24 21:32:45

在这种情况下,Backbone documention不完整。当与merge:true选项和idAttribute一起使用时,它将不起作用。在这种情况下,您需要:

代码语言:javascript
复制
var ModelFactory = function (attr, options) {
  switch (attr.type) {
    case 'file':
      return new file(attr, options);
    case 'folder':
      return new folder(attr, options);
  }
};
ModelFactory.prototype.idAttribute = '_id';

var fs = Backbone.Model.extend({
   model: ModelFactory
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14263765

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档