Javascript 是否可以在运行时更改主干.Collection的模型

Javascript 是否可以在运行时更改主干.Collection的模型,javascript,backbone.js,collections,Javascript,Backbone.js,Collections,是否有一种干净的方法可以在运行时更改主干集合的模型?换句话说,我有一个名为BaseCollection的集合,默认情况下,它的模型名为BaseModel。该模型充当其他模型的基类。说AModel,BModel,等等 现在,在运行期间,基于特定参数的集合需要了解它是否必须调用BaseModel的parse方法(具有特定覆盖)或扩展自BaseModel的模型中使用的parse方法之一 通常,这可以通过每次实例化集合时扩展集合来实现。例如,默认情况下,定义如下 var BaseCollection =

是否有一种干净的方法可以在运行时更改主干集合的模型?换句话说,我有一个名为
BaseCollection
的集合,默认情况下,它的模型名为
BaseModel
。该模型充当其他模型的基类。说
AModel
BModel
,等等

现在,在运行期间,基于特定参数的集合需要了解它是否必须调用
BaseModel
parse
方法(具有特定覆盖)或扩展自
BaseModel
的模型中使用的
parse
方法之一

通常,这可以通过每次实例化集合时扩展集合来实现。例如,默认情况下,定义如下

var BaseCollection = Backbone.Collection.extend({

    model : BaseModel,

    // other stuff here
});
现在,如果我想要一个集合,其中
AModel
必须是
模型

BaseCollection.extend( { model: AModel } );

这里是复杂的东西。如果集合不包含相同类型的模型,该怎么办。换句话说,如果
BaseCollection
包含
AModel
s、
BModel
s等,该怎么办?注意,我需要为每个模型调用
parse
方法,因为它们略有不同

创建不同模型集合的
magic
是通过实现
model
功能来实现的

下面是来自


在您的情况下,您应该使用属性来决定要创建哪个模型

创建不同模型集合的
魔法是通过实现
模型
功能

下面是来自


在您的情况下,您应该使用属性来决定要创建哪个模型

创建不同模型集合的
魔法是通过实现
模型
功能

下面是来自


在您的情况下,您应该使用属性来决定要创建哪个模型

创建不同模型集合的
魔法是通过实现
模型
功能

下面是来自


在您的情况下,您应该使用属性来决定要创建的模型

谢谢+1.我在文档中完全没有看到它。如果
条件
来自从后端返回的数据,我可以继续应用此条件吗?换句话说,在哪里可以找到
条件
?从
attrs
options
或其他地方?@flexaddicted条件可以来自attrs、option、收集状态、标志或您拥有的任何其他
synchronous
代码,例如,在attrs中,我将找到从属于特定模型的请求返回的属性。是吗?@flexaddicted是的,您需要找到一些属性(从属性中)来区分不同的模型。谢谢+1.我在文档中完全没有看到它。如果
条件
来自从后端返回的数据,我可以继续应用此条件吗?换句话说,在哪里可以找到
条件
?从
attrs
options
或其他地方?@flexaddicted条件可以来自attrs、option、收集状态、标志或您拥有的任何其他
synchronous
代码,例如,在attrs中,我将找到从属于特定模型的请求返回的属性。是吗?@flexaddicted是的,您需要找到一些属性(从属性中)来区分不同的模型。谢谢+1.我在文档中完全没有看到它。如果
条件
来自从后端返回的数据,我可以继续应用此条件吗?换句话说,在哪里可以找到
条件
?从
attrs
options
或其他地方?@flexaddicted条件可以来自attrs、option、收集状态、标志或您拥有的任何其他
synchronous
代码,例如,在attrs中,我将找到从属于特定模型的请求返回的属性。是吗?@flexaddicted是的,您需要找到一些属性(从属性中)来区分不同的模型。谢谢+1.我在文档中完全没有看到它。如果
条件
来自从后端返回的数据,我可以继续应用此条件吗?换句话说,在哪里可以找到
条件
?从
attrs
options
或其他地方?@flexaddicted条件可以来自attrs、option、收集状态、标志或您拥有的任何其他
synchronous
代码,例如,在attrs中,我将找到从属于特定模型的请求返回的属性。是吗?@flexaddicted是的,您需要找到一些属性(从属性中)来区分不同的模型
var Library = Backbone.Collection.extend({

  model: function(attrs, options) {
    if (condition) {
      return new PublicDocument(attrs, options);
    } else {
      return new PrivateDocument(attrs, options);
    }
  }
});