Aurelia Dialog запускается "затем", прежде чем диалог возвращается

У меня есть представление, которое запускает диалоговое окно подтверждения, но вместо ожидания возврата диалогового окна с результатом код переходит прямо к части "тогда" обещания. Смотрите код ниже:

ConfirmDialog.ts

import { inject } from 'aurelia-framework';
import { DialogController } from 'aurelia-dialog';

@inject(DialogController)
export class ConfirmDialog {
  private message: string;
  private controller: DialogController;

  constructor(controller: DialogController) {
    this.controller = controller;
  }

  public activate(message: string) {
    this.message = message;
  }
}

ConfirmDialog.html

<template>
  <div tabindex="-1" role="dialog">
    <div class="modal-dialog">
      <div class="modal-content">
        <div class="modal-header">
          <button type="button" click.trigger="controller.cancel()" class="close" aria-label="Close"><span aria-hidden="true">&times;</span></button>
          <h4 class="modal-title">Confirmation</h4>
        </div>
        <div class="modal-body">
          ${message}?
        </div>
        <div class="modal-footer">
          <button type="button" class="btn btn-default" click.trigger="controller.cancel()">No!</button>
          <button type="button" class="btn btn-danger" click.trigger="controller.ok()">Yes</button>
        </div>
      </div><!-- /.modal-content  -->
    </div><!-- /.modal-dialog -->
  </div><!-- /.modal -->
</template>

SomeView.ts

import * as moment from 'moment';
import { inject, singleton } from 'aurelia-framework';
import { DialogService } from 'aurelia-dialog';
import { ConfirmDialog } from '../components/modal/confirmDialog';
import { InfoDialog } from '../components/modal/infoDialog';
import { StateStore } from '../common/StateStore';
import { Routing } from '../common/routing';

@singleton()
@inject(Routing, StateStore, DialogService)
export class SomeView {
    private routing: Routing;
    private commonState: StateStore;
    private dialogService: DialogService;

    constructor(routing: Routing, stateStore: StateStore, dialogService: DialogService) {
        this.routing = routing;
        this.commonState = stateStore;
        this.dialogService = dialogService;
    }

    public someButtonClickHandler(someArg: SomeType) {
      if (!this.routing.auth.authenticated) {
        this.routing.router.navigate('#/login');
      }
      this.dialogService.open({
        viewModel: ConfirmDialog,
        model:
          'Do you wish to continue'
      }).then((response) => {
        if (response.wasCancelled) {
          return;
        }

        this.dialogService.open({
          viewModel: InfoDialog,
          model: 'Why is this happening..'
        });
      });
    }
}

Я опустил HTML для представления, так как он работает, и все привязки запускаются правильно. Это работало, я обновил aurelia-bundler, который вызвал ошибку времени выполнения, поэтому я вернулся к предыдущей версии Bundler. Ошибка выполнения прекратилась, но теперь кажется, что Promise закорочен. Я даже пытался проверить проект из системы контроля версий, и это продолжает происходить. Попытка очистки кэша браузера на случай, если что-то там не так, но независимо от того, что я делаю, "почему это происходит..." всегда показывает, прежде чем какое-либо взаимодействие может произойти с диалоговым окном подтверждения. Когда я нажимаю "ОК" в InfoDialog, внизу появляется диалоговое окно подтверждения, и затем нажимает "Отмена" или "ОК", но ничего не делает.

Любая помощь будет оценена.

1 ответ

Решение

Скорее всего, это связано с нарушением изменений в диалоге aurelia между бета и RC.

Попробуйте изменить this.dialogService.open({...}).then(...) в this.dialogService.open({...}).whenClosed().then(...),

См. Примечания к выпуску RC-1: https://github.com/aurelia/dialog/releases/tag/1.0.0-rc.1.

В блоге Aurelia также есть запись в блоге: http://blog.aurelia.io/2017/04/27/aurelia-dialog-release-candidate/

Другие вопросы по тегам