木偶地区和路线

时间:2015-06-09 13:19:14

标签: backbone.js marionette backbone-views

我正在使用LayoutView以表格形式显示集合。当用户点击tr时,我将CompositeView交换为使用相同区域显示详细信息的ItemView。这一切都有效,除了后退按钮的功能被打破。有没有办法捕获后台事件并切换视图?

或者我应该使用两个视图并传递模型ID然后重新获取模型?这个问题虽然是额外的请求,但我丢失了表的过滤器和排序值,除非我使用本地存储。

1 个答案:

答案 0 :(得分:0)

包含更多代码会更好,但无论如何我都会尝试为您的问题提供一些指导。

为了避免两次获取数据,您可以将一个共同的对象保存在父母的#34;组件,例如在路由器中。

 var theObject;
 var router = Marionette.AppRouter.extend({
   routes: {
    "routeA/:id": "goToRouteA",
    "routeB/:id": "goToRouteB"
   },
   goToRouteA: function(id) {
     MyRegion.show(new myLayout({
       model: this._getCommonObject(id)
     }));
  },
  goToRouteB: function(id) {
     MyRegion.show(new myLayout({
       model: this._getCommonObject(id)
     }));  
  },
  /*Return the common object for the views*/
  _getCommonObject: function(id) {
    theObject = (theObject && theObject.get('id') == id) ? theObject : MyApp.request('getTheObject'); 
    return theObject;
  }
});

通过这种方式,您可以保留对同一对象的引用而不会丢失信息。

您必须确保在不需要时删除该对象,以避免保留旧信息,例如在Region close事件上。