在骨干网中的多个视图之间共享模型

时间:2012-08-03 15:10:09

标签: architecture backbone.js

我有一个用户创建约会的模型和视图。我正在增加员工创建“官方”约会的能力。这些约会将提供其他选项和活动,但大多数情况下,约会模型将具有类似的属性(日期,位置,客户)。

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

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

3 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:1)

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

Class diagram of appointment

这看起来似乎微不足道,但是通过这个可以帮助您确定可以放在父类中的类之间的共性,并且可以帮助您避免在您的子类中编写一堆代码,以防您遗漏某些内容。如果您有兴趣,请查看Astah社区版。它是免费的,非常容易使用。

答案 2 :(得分:1)

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

如果您将只有有限数量的不同约会类型,我建议您使用一个约会模型并添加一个类型属性,该属性定义它是哪种类型的模型。然后,您可以使用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
}