gpt4 book ai didi

aurelia - 如何将子路由器注入(inject)对话框 View 模型

转载 作者:行者123 更新时间:2023-12-05 07:46:40 24 4
gpt4 key购买 nike

在我们的项目中,我们有一堆这样的自定义元素:

<entity-link id="entity.id>

基本上它只是呈现一个编辑实体屏幕的链接

<template>
<a class="entity-link"
route-href="route: ENTITY_EDIT; params.bind: { id: entity.id }"
>${entity.name}
</a>
</template>

问题是这在 Aurelia Dialog 上下文中根本不起作用。href 属性根本没有填充。

我试图调查这个问题,我将路由器直接注入(inject)了对话框的 View 模型

import {Router} from 'aurelia-router';
@inject(DialogController, Router)
export default class RecordDetailsDialog {
constructor(dialogController:DialogController, router:Router) {
this.controller = dialogController;
this.router = router; /// WRONG INSTANCE!!!
}
}

并发现错误的 Router 实例被注入(inject)。主路由器(AppRouter)没有定义 ENTITY_EDIT 路由,它是在子路由的 configureRoute 函数中动态添加的。

我不明白为什么注入(inject)的路由器是主要路由器,而不是传递给启动对话框打开的 View 的路由器。

有什么建议

最佳答案

所以在阅读 aurelia 的源代码 2 小时后,我发现 DialogService 实例是在根 DI 容器中创建的,该容器与不知道子路由的根 Router 相关联。我通过在 subview 模型容器中手动注册 DialogService 实例解决了我们的问题

  import {Container} from 'aurelia-dependency-injection';
import {CompositionEngine} from 'aurelia-templating';
import {DialogService} from 'aurelia-dialog';

export class Main {

constructor(container:Container, compositionEngine:CompositionEngine){
container.registerInstance(DialogService, new DialogService(container, compositionEngine))`
}
...
}

但感觉很hacky,还在想是否有更干净的方法来解决这个问题。

关于aurelia - 如何将子路由器注入(inject)对话框 View 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40495785/

24 4 0
文章推荐: java - 在 @OneToMany Set 上使用 @JsonSerialize(using=MySerializer.class)