假设我在/search
处有一个搜索表单,其中QueryView
代表搜索表单。当用户提交查询时,我希望路由到/results
并为结果添加ResultView
,并保留QueryView
以防用户想要进行新搜索。
然后,如果用户直接导航到/results
,我必须在路线功能中同时创建QueryView
和ResultsView
。问题是我希望/search
和/results
路线中的行为相同,但必须记住在这两个地方进行任何更改。
另一种方法是在用户提交时触发/results
的路由,这会破坏现有的QueryView
并创建新的QueryView
和ResultView
。这样做有效,但是在我的情况下,摧毁和重新创建QueryView
会引起一些烦恼。
是否有标准设计模式来保持跨路径的视图,而无需在两个地方创建视图的代码?
答案 0 :(得分:1)
您可以将共享行为放入路由器的方法中,然后让两个路由都调用该方法。
要缓存QueryView
,您只需将其设为Router
的属性即可。在/search
和/results
路线中,只需执行以下操作:
this.queryView = this.queryView || new QueryView();
this.queryView.doWhatever();
答案 1 :(得分:0)
我最后写了ViewManager class来处理跨越路线的持久观点。用法示例:
// On load
var FooView = Backbone.View.extend({ ... });
var BarView = Backbone.View.extend({ ... });
var vm = new ViewManager({selector: ".content");
// On route
var foo = vm.getView(FooView, {}, true);
vm.showViews([foo]);
// On another route
var foo = vm.getView(FooView, {}, true);
var bar = vm.getView(BarView, {}, true);
vm.showViews([foo, bar]);