我尝试编写两个视图登录视图并注册每个视图,每个渲染均使用从两个视图中的keyup dom事件收集的相同数据。与注册模板相比,登录模板具有更少的数据字段,因此模板变量更少。
因此,我想到了使用一个模型对这两个表单进行gui渲染,即表单数据模型。我试图将关注点分开,并对模块负责。现在,需要使表单数据模型成为一个视图的依存关系并在该视图中创建,并通过使前一个视图成为该另一视图的依存关系来从另一个视图中提及该实例。但是,此最后一个应该使用与它具有依赖关系的视图相同的实例。似乎只有一个视图和三个单独的模型可以构成数据,登录和注册以及两个不同的模板,这是一个解决方案。
这似乎令人惊讶。在面向对象的范式中,感觉到添加了一个小功能使其变得非常笨拙,这与面向对象的思想相冲突。所有这些功能都适用于当用户在登录视图中单击注册按钮时,注册视图将使用刚输入的数据进行渲染,反之亦然。
这种用法是从另一个视图/模型引用另一个视图/模型以使用其模型等,是对Backbone或Require的错误使用,而它们是要利用良好的开发实践,例如关注点分离,单一职责和模块化分离,还是对于那些良好的开发实践来说一点都不坏吗?
我不认为这是“错误的”每说有View1
依靠View2
,这样View1
可以访问Model
该View2
创建...但我不认为这是次优的。我可以想到您可能要考虑的另外两种策略,这些策略可以避免您View1
依赖View2
。
首先,你可以选择不创建的Model
中View2
,而是只是填充它View2
...并创建自己的模块中预先它。换一种说法:
// theLoginData.js
define(['LoginData'], function(LoginData) {
return new LoginData();
});
// View #2
define(['theLoginData'], function(theLoginData) {
return Backbone.View.extend({
someMethod: function() {
theLoginData.set(whatever);
}
});
});
// View #1
define(['theLoginData'], function(theLoginData) {
return Backbone.View.extend({
someOtherMethod: function() {
var whatever = theLoginData.get('whatever');
}
});
});
另一个选择是仍然Model
在View2中创建,但在更全局的范围内“注册”它(例如,作为Model
用于登录数据的类的静态属性Model
):
// LoginData.js (ie. the Model class for your login data)
define([], function() {
return Backbone.Model.extend({}, {
currentLoginData: null
});
});
// View #2
define(['LoginData'], function(LoginData) {
return Backbone.View.extend({
someMethod: function() {
LoginData.currentLoginData = new LoginData(whatever);
}
});
});
// View #1
define(['LoginData'], function(LoginData) {
return Backbone.View.extend({
someOtherMethod: function() {
var whatever = LoginData.currentLoginData.get('whatever');
}
});
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句