2011-09-05 66 views
5

我有我的Backbone.js的我实现一个典型的主详细情况。Backbone.js的主详细情况

因为我不关心Backbone.js的,所以我跳过它的历史和导航部分的时刻。

  • 我有一个GridView,其中所有模型都从休息服务中获取并显示。
  • 我有其中来自电网的特定选择的模型显示与出现在主网格视图更多字段的DetailView(模态窗口)。

我已经实现:

  • 所有骨干的意见和路由器连接主应用程序。
  • 应用程序上的文件初始化加载
  • 主骨干路由器(作用更象是一个经典的“控制器”)配有责任:
    • 创建和销毁的观点
    • 取出和发布数据
    • 通过数据视图
    • 协调意见事件

现在从为GridView(骨干集合),其余服务返回的数据仅是该机型的一些部分数据。

所以要显示一个特定的模式,我不得不从其余的服务再次读取该细节的全部细节。

从模型的读取与从集合并在其上的任何更新断开的模型最终不会反映在集合本身,我必须再次刷新获取所有数据的主视图。

摧毁与重建的详细信息视图有时使其失去了查看事件。

什么是正确执行此方案的? 我不完全理解在骨干中做事的最佳方式。

回答

7

首先,我建议你“的GridView”集合查询返回的全部细节的模型。这解决了'断开收集'问题。

虽然,你不必做充分收集负载 - 比方说做整个收集满负荷行不通 - 细节过于庞大,例如,你应该能够通过从收集到您的详细取景模式,测试,看看它的部分负荷或满负荷,并出具了“取()”为模型,返回完整的数据 - 是,这是相同的模型作为收集,它应该更新。那有意义吗?

另外,对于详细视图,我会建议,特别是如果您只设计了一个活动的详细视图调用,可以在视图中重新使用视图并编写一个函数,以允许您更换模型。

因此,简言之:

  • 在应用程序启动,加载一个GridView和一个的DetailView。
  • 重构您的detailView以允许在其上设置模型。 (detailView.setModel(..)
  • 当用户想要查看模型上的细节时,使用上述函数将该模型传递到detailView中
  • 如果模型未完全加载,您的setModel方法可以你可以测试某个特定的属性,这个属性只会在满负荷时出现,或者在模型上设置一个属性来表明它是否已经被完全加载。
  • 如果你发现自己失败事件,请尝试在render()函数结束时调用delegateEvents()函数重新绑定事件
  • 由于在gridView集合和detailView中都使用了相同的模型,因此假设您正在响应更改事件正确,平安应该同步。