在Durandal中导航时传递物体

时间:2013-09-04 07:15:54

标签: durandal

我正在使用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;
};

1 个答案:

答案 0 :(得分:4)

使用路由器的导航无法实现您的目的。导航时,路由器会在内部更改URL,以便触发合成生命周期。因此,基本上为了完成这项工作,您需要在URL查询字符串中添加所有对象,这可能非常难看。

请看一下这个very completed answer by Jonathan Curtis in the DurandalJS Google Groups如何解决这个问题。

建议的三种方法是:

  • 亲子
  • EventAggregator
  • 共享上下文(或模型)