我正在使用LayoutView以表格形式显示集合。当用户点击tr时,我将CompositeView交换为使用相同区域显示详细信息的ItemView。这一切都有效,除了后退按钮的功能被打破。有没有办法捕获后台事件并切换视图?
或者我应该使用两个视图并传递模型ID然后重新获取模型?这个问题虽然是额外的请求,但我丢失了表的过滤器和排序值,除非我使用本地存储。
答案 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事件上。