如何防止电子中的多个对话框

时间:2018-03-04 15:43:59

标签: javascript electron

我正在用电子dialog.showMessageBox打开一些消息框。

但它目前正在打开多个盒子。我想一次只打开一个消息框。

fetch(payload.url)
  .then(res => res.json())
  .then(data => {
    download(BrowserWindow.getFocusedWindow(), data.presigned_url, {
      saveAs: true,
      // openFolderWhenDone: true,
      showBadge: false,
      filename: payload.filename
    }).then(item => {
      const filePath = item.getSavePath();
      dialog.showMessageBox(
        BrowserWindow.getFocusedWindow(),
        {
          type: 'info',
          title: 'Download Status',
          message: 'Download Complete',
          buttons: ['Close', 'Open Folder', 'Open'],
        },
        dialogId => {
          switch (dialogId) {
            case 0:
              break;
            case 1:
              shell.showItemInFolder(filePath);
              break;
            case 2:
              shell.openItem(filePath);
            default:
              break;
          }
        },
      );
    });
  });

例如,我想在新消息框打开时关闭最后一个消息框,或者如果一个消息框已经打开则不允许打开下一个消息框。

任何形式的帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

在我的项目中 我提供了一个state属性,例如isOpenBrowseFileDialog并像一个标志一样使用它。如果启动对话框,则将标志设置为true,这将有助于防止打开许多对话框。

browseFiles = async (e) => {
    e.preventDefault();
    const ref = this;
    const { isOpenBrowseFileDialog } = this.state;
    if(isOpenBrowseFileDialog === false) {
      this.setState({
        isOpenBrowseFileDialog: true
      });
      remote.dialog.showOpenDialog({
        properties: ['openFile', 'multiSelections']
      }, async (files) => {
        if (files !== undefined) {
          await ref.handleFilesAfterAdding(files);
        }
        ref.setState({
          isOpenBrowseFileDialog: false
        });
      });
    }
  }