在多个不同的Backbone / Require视图中使用相同的对象实例

时间:2014-10-17 23:06:30

标签: backbone.js requirejs

我尝试编写两个视图登录视图和注册视图,每个渲染都使用从两个视图中的keyup dom事件收集的相同数据。登录模板的数据字段较少,因此模板变量少于寄存器模板。

所以我想到使用一个模型来渲染那两个,形成数据模型。我试图将问题分开并对我的模块承担单一责任。现在,需要使表单数据模型成为一个视图的依赖关系并在此视图中创建,并通过使前一个视图成为该另一个视图的依赖关系来提及另一个相同的实例。然而,最后这个应该使用它所具有的视图的相同实例作为依赖。它似乎只有一个视图和三个独立的模型形成数据,登录和注册,两个不同的模板可以解决。

这似乎令人惊讶。在面向对象的范例中,添加一个小特征使其非常快速繁琐,这与面向对象的想法相冲突。所有这些功能都是当用户在登录视图中单击注册按钮时,注册视图使用刚输入的数据呈现,反之亦然。

这种用法,从另一个视图/模型中引用一个视图/模型以使用其模型等,是对Backbone或Require的错误使用,而它们旨在利用良好的开发实践,例如关注点分离,单一责任和模块化分离,或者对那些良好的开发实践一点都不差?

1 个答案:

答案 0 :(得分:1)

我认为让View1取决于View2,以使View1可以访问Model创建的View2,这并不是“错误的” ......但我确实认为它不是最佳的。我可以想到您可能想要考虑的另外两种策略可以避免让View1依赖于View2

首先,您可以选择不在<{1}}中创建 Model,而只需View2填充。 ..并且在其自己的模块中预先创建。换句话说:

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类的静态属性数据Model):

Model