首先,在询问here之前,我问过这个问题的简单版本。但是,当我搜索事物时,事情变得更加复杂,我可以对其进行更多描述。
我正在尝试用Google的Blockly创建一个Electron App。在Blockly的域中重命名变量会在用户浏览器中打开一个提示,询问新变量的名称,您可以看到on it's own website(单击“Count”并选择“Rename variable ...”)。
问题是:Electron不支持window.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
的源代码是here,通过查看它和我试图从here改编的信息,我更改为上面的代码,从而推断prompt
返回了promise。但是,似乎callback
中的Blockly.prompt
不会等待通过setPrompt()
中打开的模态输入并引发错误,但是如果我使用一个简单的函数只是在callback
中返回一个字符串,它将按预期工作...现在我很困惑,如果是关于我自己仍然使用Promises错误,或者
callback
中的Blockly.prompt
不支持“等待 promise ” ...希望这有助于解释在查找有关此问题的更多信息后尝试使用的方法。
最佳答案
我设法解决了这个问题,我将其发布,以防有人需要有关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))})
}
关于javascript - 用户输入带有Electron的JavaScript-替代Window.Prompt(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49426346/