2

我有一个用户创建约会的模型和视图。我正在增加员工创建“正式”任命的能力。这些约会将有额外的选项和事件可用,但在大多数情况下,约会模型将具有相似的属性(日期、地点、客户)。

我想做的是有一个模型来处理所有约会并传入参数以创建默认属性,具体取决于用户或工作人员是否创建了约会。

这是组织约会的一种干净的方式,还是我应该为每种类型的约会设置单独的模型?

4

3 回答 3

2

这听起来像是您想要扩展现有Appointment模型的地方。不要只是根据创建者设置不同的属性。

var Appointment= Appointment.Model.extend({
     ...
});

var UserAppointment = Appointment.extend({
     ...
});

var StaffAppointment = Appointment.extend({
     ...
});
于 2012-08-03T16:18:47.227 回答
1

我一直发现创建类图确实有助于确定我必须对我的对象做什么。在您的情况下,我设想的是一个主要的 Appointment 类,其中包含用于各种约会类型的子类。这是一个简单的 UML 类图表示:

约会类图

这可能看起来微不足道,但是通过它可以帮助您识别可以放置在父类中的类之间的共性,并且可以帮助您避免在子类中编写大量代码以防万一您遗漏了什么。如果您有兴趣,请查看 Astah 社区版。它是免费的,而且非常易于使用。

于 2012-08-03T17:11:01.740 回答
1

多个约会模型的问题在于从面向对象的角度来看是干净的,这不是很实用,因为不同的模型不能存在于同一个集合中(一个集合只能存储一个模型类的模型)。

如果您只有有限数量的不同约会类型,我建议您使用一个约会模型并添加一个类型属性来定义它是哪种类型的模型。然后,您可以使用该initialize方法使用下划线_.defaults()函数设置默认值,如下所示:

initialize: function(){
  var defaults;

  switch(this.get("type"){
  case "USER":
    defaults = {...};
    break;
  case "STAFF":
    defaults = {...};
    break;
  case default:
    defaults = {};
  };

  _.defaults(this.attributes, defaults); // this doesn't use the set functions and doesn't trigger any change events, neither does the default implementation in the Backbone.Model constructor
}
于 2012-08-03T18:32:57.460 回答