我正在使用Durandal 2.0。我有一个搜索视图,并希望将所选项目传递给详细信息视图。我知道如何传递Id,但由于在这种情况下搜索具有整个对象,我想在导航时传递对象。我以为我可以使用带有splat的路线,但是当我激活路线时,我不确定如何发送它。
路线映射为:
router.map([
{ route: '', title: 'Search', moduleId: 'viewmodels/search', nav: true },
{ route: 'create', title: 'Add', moduleId: 'viewmodels/create', nav: true },
{ route: 'details*movie', title: 'Details', moduleId: 'viewmodels/details', nav: false },
{ route: 'edit', title: 'Edit', moduleId: 'viewmodels/edit', nav: false }
]).buildNavigationModel();
搜索视图模型的导航方式如下:
var openmovie = function (data) {
router.navigate('details*'+ ??what do I do here??);
};
详细视图模型具有激活功能:
var activate = function(data) {
???what will the data be???
return true;
};
答案 0 :(得分:4)
使用路由器的导航无法实现您的目的。导航时,路由器会在内部更改URL,以便触发合成生命周期。因此,基本上为了完成这项工作,您需要在URL查询字符串中添加所有对象,这可能非常难看。
请看一下这个very completed answer by Jonathan Curtis in the DurandalJS Google Groups如何解决这个问题。
建议的三种方法是: