4

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

1 回答 1

4

使用路由器的导航无法执行您尝试做的事情。当您导航时,路由器会在内部更改 URL,从而触发组合生命周期。所以基本上为了完成这项工作,您需要在 URL 查询字符串中添加所有对象,这可能非常难看..

看看Jonathan Curtis 在 DurandalJS Google Groups 中的这个非常完整的答案,了解如何处理这种情况。

建议的三种方法是:

  • 亲子
  • 事件聚合器
  • 共享上下文(或模型)
于 2013-09-04T09:28:23.170 回答