用于在路径上保持模型和视图的设计模式

时间:2014-03-10 16:43:34

标签: javascript backbone.js backbone-views backbone-routing

假设我在/search处有一个搜索表单,其中QueryView代表搜索表单。当用户提交查询时,我希望路由到/results并为结果添加ResultView,并保留QueryView以防用户想要进行新搜索。

然后,如果用户直接导航到/results,我必须在路线功能中同时创建QueryViewResultsView。问题是我希望/search/results路线中的行为相同,但必须记住在这两个地方进行任何更改。

另一种方法是在用户提交时触发/results的路由,这会破坏现有的QueryView并创建新的QueryViewResultView。这样做有效,但是在我的情况下,摧毁和重新创建QueryView会引起一些烦恼。

是否有标准设计模式来保持跨路径的视图,而无需在两个地方创建视图的代码?

2 个答案:

答案 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]);