0

我刚刚开始将backbone.js 用于一个新的崩溃项目。我的应用程序有一个动态(数据驱动的)用户菜单。每个菜单选项都是一组混合类型的图形/小表格。例如,销售概览菜单选项可以有一个包含 2 个饼图对象、2 个折线图、一个条形图等的页面。我不知道菜单选项将是什么,也不知道每个菜单选项将包含什么。

我正在考虑通过扩展 Backbone.Model - PieModel、BarModel、DispersionModel 等来定义一堆通用模型“类”。以及可以呈现类型对象的相应 View 类 - PieView、LineView 等。然后我可以按照动态配置的定义将它们组合在一起来组装一个页面。每个模型实例的数据 url 都可以通过动态配置轻松生成。

我首先担心的是 Backbone 是否支持混合模型类型的集合。这是由 Collection 的“模型”属性的存在引起的 - 它是否假设同质性?但它也说一个集合可以保存一组有序的模型......模型属性可以是多态的......一种让“模型”保存在集合中的方法。我应该将其视为“模型对象”吗?

对我来说,“页面”确实是此类对象的集合。我想动态创建一个集合并用不同模型类型的实例填充它。然后通过视图渲染它。或者,创建一个包含各种模型对象数组的视图并渲染视图,同时绕过集合。

我将感谢您对我概述的设计的投入,以及对骨干网的良好参考,以及如何在混合模型案例中部署集合的清晰性?也许有一种不同的,更聪明的方式来处理这种情况......

谢谢。

4

2 回答 2

2

集合只有在将普通对象传递给它的加法器函数(例如, )时才真正使用它们的model属性。如果您查看源代码,每个加法器函数都会将输入传递给,它会检查输入是否是 a 的实例。如果不是,它会尝试使用集合的 实例化一个新模型,否则它只会返回原样的输入。addpush_prepareModelBackbone.Modelmodel

因此,只要您始终将真实的 Model 对象添加到您的集合中,您就应该可以使用不同的类型。

pluck但是,如果您打算使用作用于模型属性的聚合函数例如认为它会默默地失败,这可能是你想要的)。

于 2013-05-31T14:46:03.437 回答
1

我不确定我是否 100% 正确理解了您的情况,但是,我不相信您正在以正确的方式考虑这个问题......

在我看来,你的模型应该包含数据,视图应该代表它们。因此,在销售上下文中,您可能有一个SalesData模型可以显示在PieViewBarViewTableView中。尝试将显示逻辑与数据完全分开——我认为图表的类型属于显示逻辑。

使用上述方法,每个页面将包含一组不同的视图,如果您觉得需要,您可能会将其包含在主视图中。每个视图都有自己的模型(或集合,具体取决于您如何构建数据),然后您可以使用普通的 Backbone 方法对其进行更新/操作。

据我所知,一个集合不可能包含不同类型的模型,但即使是这样,我也可能不会推荐它,因为它会使代码复杂化很多。

在学习资源方面,这里有几个:

强制学习 Backbone JS - javascriptissexy.com - 这个非常彻底,但需要一些时间才能完成。

骨干模式- 更快地让您进入正确的心态。

于 2013-05-31T14:18:58.677 回答