繁体   English   中英

用户输入带有Electron的JavaScript-替代Window.Prompt()

[英]User input JavaScript with Electron - alternative to Window.Prompt()

首先,在这里对它进行过多研究之前,我问过这个问题的简单版本。 但是,当我搜索事物时,事情变得更加复杂,我可以对其进行更多描述。

我正在尝试用Google的Blockly创建一个Electron App。 在Blockly的域中重命名变量会在用户浏览器中打开提示,要求您输入新变量的名称,就像您在其自己的网站上看到的那样 (单击“计数”并选择“重命名变量...”)。

问题是:Electron不支持window.prompt() ,如果我按Blockly.prompt代码,它也不做任何事情,因此,经过一番搜索后,我了解到您可以重写Blockly.prompt来使用您自己的代码。 我的猜测:因此您可以使用window.prompt()的替代方法

我安装了electron-prompt ,并试图使用它在新的提示窗口中获取用户输入,然后将其发送回处理重命名的Blockly核心功能。 这是我正在尝试的:

var prompt = require('electron-prompt');
var setPrompt = function()
{ 
    return prompt
    ({
        title: 'Renaming',
        label: 'Renaming variable to:',
        type: 'input'
    })
};

var getPrompt = function()
{
    return setPrompt().then(function(value){return value})
}

var promptReturn = function()
{
    return getPrompt().then(function(value){return value})
}

Blockly.prompt = function(message, defaultValue, callback)
{
    callback(promptReturn().then(function(value){return value}));
};

编辑: electron-prompt源代码在这里 ,通过查看它和我试图从此处改编的信息,我更改为上面的代码,推断prompt 返回了诺言 但是,似乎Blockly.prompt中的callback不等待通过setPrompt()打开的模式的输入,并引发错误,但是如果我使用简单的函数只是在callback返回一个字符串,则它按预期工作。 。

现在我很困惑,如果是关于我自己仍然使用Promises错误还是Blockly.prompt中的callback不支持“等待诺言” ...

希望这有助于解释在查找有关此问题的更多信息后尝试使用的方法。

我设法解决了这个问题,我将其发布,以防有​​人需要有关Blockly.prompt覆盖的明确答案。 看来callback覆盖必须返回新变量的字符串时功能,所以我试图用promise的首要之内,并调用一个简单的函数只是适用的价值then()如下:

var prompt = require('electron-prompt');
var renameVar = function(name)
{
    return name;
}

Blockly.prompt = function(msg, defaultValue, callback)
{
    prompt
    ({
        title: 'Renaming',
        label: 'Renaming variable to:',
        type: 'input'
    }).then((name)=>{callback(renameVar(name))})
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM