javascript - Aurelia Router hook - 提供一个预实例化和激活的模块

标签 javascript aurelia

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

考虑这种情况...

  • 我的域中有一个名为 Contract 的模型。
  • 用户可以搜索契约(Contract)。
  • 用户可以在单独的选项卡中打开多个不同的契约(Contract)实例

以下是 UI 的一部分,显示了在选项卡中打开多个契约(Contract)时的外观... tab-example-screen-cut

在这里您可以看到一个契约(Contract)导航级别,其中有一个搜索选项卡(静态且始终打开)以及用户打开的 3 个契约(Contract) 123456789102,和 987654

有什么方法可以使用路由器来做这样的事情吗?因此,一旦契约(Contract)打开,如果用户切换回来又切换回来,我可以只提供初次访问时已经加载和激活的模块吗?

目前,我已经使用一种作为包装器的合约容器 VM 以及一种开放式合约模型的缓存解决了这个问题。选项卡本身是根据缓存中的契约(Contract)构建的,当容器被激活时(通过路由到/contract/:id),它通过该 id 在缓存中搜索契约(Contract),如果找到则使用否则加载契约(Contract)然后显示它通过撰写...

我原型(prototype)化了这个 here 。容器 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);
  }
}

和 View :

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

最佳答案

西蒙,

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

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

在激活事件中,获取 id 并提取与该契约(Contract)相关的数据并显示它。数据可以在内存、本地存储或数据库中。

因此,您无需尝试让路由器加载已创建的 View ,您只需获取当前合约实体并将其绑定(bind)即可。

对用户来说,它看起来像是转到不同的选项卡,但实际上,它是相同的 UI,只是不同的数据。

绑定(bind)到契约实体,而不是 viewModel 的属性。然后当你交换实体时,所有先前的数据都已经在实体中了。例如绑定(bind)

关于javascript - Aurelia Router hook - 提供一个预实例化和激活的模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31801391/

相关文章:

aurelia - 在 Aurelia Store 的配置管道步骤中使用 @connectTo 装饰器时,状态始终未定义

javascript - 如何使用javascript打印图像

javascript - Aurelia 要求 html 导入不起作用

javascript - Aurelia show.bind 是否有回调或 promise ?

javascript - AWS dynamodb 使用 "on-demand"ProvisionedThroughput 创建表

microsoft-edge - if.bind 在中继器上 - 在 Edge 和 IE 中不起作用

javascript - `run() {}` 在 javascript/Aurelia 中有什么作用?

javascript - 清除之前的 JQuery 验证错误消息

javascript - Django + Django-Pipeline with Javascript "Require"

javascript - HREF 在第三层不起作用,使用视差 CSS