2016-11-08 2 views
2

В нашем проекте мы имеем кучу пользовательских элементов, как это:Как придать ребенок маршрутизатор к диалоговой-модели

<entity-link id="entity.id> 

в основном это просто делает ссылку на экране редактирование Entity

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

проблема в том, что это не работает вообще в контексте Aurelia Dialog. href Приписывается не заполняется вообще.

Я пытался исследовать этот вопрос, я вводил маршрутизатор непосредственно к диалогу по показам модели

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!!! 
    } 
} 

и выяснили неправильный экземпляр маршрутизатора впрыскивается. Главный маршрутизатор (AppRouter) не определяет маршрут ENTITY_EDIT, он динамически добавляется в функцию configureRoute дочернего маршрута.

Я не понимаю, почему введенный маршрутизатор является основным, а не тот, который передается в представление, которое инициирует открытие диалога.

Любые советы, пожалуйста

ответ

0

так после 2 часов исходного кода читального Аурелия, я обнаружил, что экземпляр DialogService создан в DI контейнера корня, который связан с корневым маршрутизатором, который не знает о детских маршрутах. я работал вокруг нашей проблемы путем регистрации экземпляра 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, все еще интересно, если есть более чистый способ решить эту проблему.