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
}