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