Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Aurelia路由器挂钩-提供预实例化和激活的模块_Javascript_Aurelia - Fatal编程技术网

Javascript Aurelia路由器挂钩-提供预实例化和激活的模块

Javascript Aurelia路由器挂钩-提供预实例化和激活的模块,javascript,aurelia,Javascript,Aurelia,我想知道路由器中是否有一个钩子来提供一个已经实例化的模块?如果我走错了方向,有什么更好的方法 考虑一下这种情况 我在我的领域里有一个模型叫做合同 用户可以搜索合同 用户可以在单独的选项卡中打开多个不同的合同实例 以下是UI的一个部分,它显示了在选项卡中打开多个合同时的外观。。。 在这里,您可以看到一个合同导航级别,它有一个搜索选项卡(静态且始终打开),加上用户123456、789102和987654已打开的3个合同 有没有办法用路由器来做这样的事情?因此,一旦合同被打开,如果用户切换离开并

我想知道路由器中是否有一个钩子来提供一个已经实例化的模块?如果我走错了方向,有什么更好的方法

考虑一下这种情况

  • 我在我的领域里有一个模型叫做合同
  • 用户可以搜索合同
  • 用户可以在单独的选项卡中打开多个不同的合同实例
以下是UI的一个部分,它显示了在选项卡中打开多个合同时的外观。。。

在这里,您可以看到一个合同导航级别,它有一个搜索选项卡(静态且始终打开),加上用户123456、789102和987654已打开的3个合同

有没有办法用路由器来做这样的事情?因此,一旦合同被打开,如果用户切换离开并切换回来,我就可以提供初始访问时已经加载并激活的模块

目前,我已经用一种契约容器VM解决了这个问题,它是一种包装器,加上一种开放契约模型的缓存。选项卡本身是从缓存中的契约构建的,当容器被激活时(通过路由到/contract/:id),它会根据该id在缓存中搜索契约,如果找到,则使用其他方法加载契约,然后通过compose显示它

我做了这个实验。容器VM看起来像:

import {inject} from 'aurelia-framework';
import {Contracts} from './contracts';

@inject(Contracts)
export class ContractContainer {
  constructor(openContracts) {
    this.id = '';
    this.openContracts = openContracts;
    this.contract = null;
  }

  activate(params) {
    this.id = 'Contract ' + params.id.toString();
    this.contract = this.openContracts.getOrCreateContractByKey(params.id);
  }
}
以及以下观点:

<template>
  <compose view-model.bind="contract"/>
</template>

西蒙

我下载并运行了您的测试项目,试图了解您在这里做什么,以下是我的想法:

联系人页面将有一个子路由器,子路由器创建选项卡。当用户选择选项卡时,路由器将导航到项目id

在激活事件中,抓取id并拉取与该合同相关的数据并显示它。数据可以在内存、本地存储器或数据库中

因此,您不需要让路由器加载一个已经创建的视图,只需获取当前的契约实体并将其绑定

对于用户来说,它看起来像是要进入一个不同的选项卡,但实际上,它是相同的UI,只是不同的数据


绑定到合同实体,而不是viewModel的属性。然后,当您交换实体时,所有先前的数据都将位于该实体中。例如bind

有趣的用例-在上面的示例屏幕截图中,您的问题是,浏览器的地址栏中当前有什么?或者@JeremyDanyow我希望url是foo.com/#contracts/123456/spot laydown如果possible@JeremyDanyow有什么建议吗?对于任何有Caliburn.Micro背景的人,我可以用
Conductor.Collection.OneActive
做类似的事情,现在没有简单的方法让路由器缓存非活动视图/视图模型,但这项工作计划在未来发布。这听起来与我原型的方法非常相似?类似,但您正在尝试加载现有/新视图。换句话说,你有很多观点。在建议的方法中,只有一个视图和视图模型。你只需更改合同..这不是我的
ContractContainer
模块的基本功能吗?我更彻底地重新阅读了你的帖子,看起来确实如此。:)我也会这样做的。