如何在客户端上处理复杂的JavaScript对象?

时间:2010-11-30 16:36:08

标签: javascript jquery ruby-on-rails asp.net-mvc

编辑:我打算将其分解为两个更具体的问题。

我正在尝试了解客户端JavaScript开发的最佳实践和模式。特别是,您如何在客户端上管理更复杂的数据模型?

作为一个例子,假设您在线管理某种商店目录,并拥有一个产品,它具有非常典型的属性:{id,description,price等...}。但是该产品还有一组可以与之关联的类别,因此需要提取另外两个列表:AvailableCategories和AssociatedCategories。当然,为了使事情更复杂,您的类别与表的关联不是简单的连接,而是具有1-10之类的标量数字之类的元数据,用于描述产品与类别的关联程度。然后说有四到五个其他关联,其中一个有一个“可用”表可能需要分页(例如,也许你将产品与表中有一百万个项目的东西相关联,你想要下拉当然只有100个,可搜索和可排序的。)

我的观点是,有很多模型,以及与元信息的连接关联,一些数据可以预先提取或静态下载到页面加载,而一些数据必须动态提取。当然,您不仅需要基本模型,还需要“可观察”,因此,如果有人选择与您的产品相关联的颜色,您将在更改的页面上的其他地方得到通知(免费)

我正在考虑转向客户端MVC框架,比如SproutCore,但是希望看到一些更轻量级的选项和模式。我很感激听到你使用它,为什么使用它,以及对这个问题空间的任何其他想法。

感谢。

4 个答案:

答案 0 :(得分:1)

当我构建javascript应用程序时,我不是从查看数据模型开始,而是从应用程序支持的用户交互开始。然后我通过制作非常具体的ajax RPC调用来设计这些交互,这些调用只填充我正在查看的视图。与该视图中的操作相同,我有非常具体的ajax RPC调用,它完全符合该视图所需的内容。

在某些情况下,我最终会得到更多通用的RPC调用,其中更多的视图可以共享相似的数据,但我重构一下,当我到达它时,我不会像那样开始建模。

到目前为止,正如你所说,我通常会在应用程序启动时读取一些静态类别等,但我已经设法避免在javascript内存中需要与后端同步的大型复杂缓存数据模型。 / p>

在此我发现MVP模式是比MVC更好的选择 - 用事件驱动我的所有应用程序代码。

答案 1 :(得分:0)

我不确定我理解你的问题,但我认为我的情况类似:

我有一个相当复杂的模型,并且必须维护它的客户端版本。对模型的调用是异步进行的,模型管理缓存和预取。当对模型进行更新时,它会触发事件,以便通知UI组件。

我没有使用任何框架来实现数据模型。 (但我使用YUI进行ajax通信和UI小部件)

答案 2 :(得分:0)

我不确定我理解。您是否发现由于其对应的服务器端对象的复杂性而难以使用JSON对象?

Ruby on Rails提供了两全其美的优势:js.erb模板。让你的AJAX请求接受js并创建一个可以直接引用你的Rails对象的js.erb模板,包括所有的关联等。这个模板将使用javascript代码,可以使用erb表示法从你的Rails对象访问值:

<%= @object.attribute %>

答案 3 :(得分:0)

  

我正在考虑转移到客户端MVC框架,比如SproutCore,但是希望看到一些更轻量级的选项和模式。

如果你想要轻量级的东西,

Sammy.js太棒了。我正在编写单页Web应用程序(完成80%)。它基于~30个表和一堆“视图”从RESTful Web服务获取/设置其所有数据。到目前为止,我感到非常震惊,Sammy肯定会帮助很多。