Architecture 在主干中的多个视图之间共享模型

Architecture 在主干中的多个视图之间共享模型,architecture,backbone.js,Architecture,Backbone.js,我有一个用于用户创建约会的模型和视图。我增加了员工创建“正式”任命的能力。这些约会将提供额外的选项和事件,但在大多数情况下,约会模型将具有类似的属性(日期、地点、客户) 我想做的是使用一个模型来处理所有约会,并传入参数来创建默认属性,具体取决于用户或工作人员是否创建了约会 这是一种干净的安排约会的方式,还是我应该为每种类型的约会使用单独的模式?这听起来像是一个您希望扩展现有约会模式的地方。不要仅仅根据创建它的人设置不同的属性 var Appointment= Appointment.Model.

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

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


这是一种干净的安排约会的方式,还是我应该为每种类型的约会使用单独的模式?

这听起来像是一个您希望扩展现有
约会
模式的地方。不要仅仅根据创建它的人设置不同的属性

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

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

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

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

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

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

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

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


这可能看起来很琐碎,但仔细研究这一点将有助于确定可以放在父类中的类之间的共性,并有助于避免在子类中编写大量代码,以防遗漏某些内容。如果您感兴趣,请查阅Astah社区版。它是免费的,而且非常容易使用。

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


这可能看起来很琐碎,但仔细研究这一点将有助于确定可以放在父类中的类之间的共性,并有助于避免在子类中编写大量代码,以防遗漏某些内容。如果您感兴趣,请查阅Astah社区版。它免费且易于使用。

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

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

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
}

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

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

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
}