首先,在here中深入研究这个问题之前,我已经问过这个问题的简单版本。然而,当我搜索事物时,事情变得更加复杂,我可以更多地描述它。
我试图用谷歌的Blockly创建一个电子应用程序。在Blockly的域中重命名变量会在用户的浏览器中打开一个提示,要求输入新变量的名称,因为您可以看到on it's own website(点击' Count& #39;并选择'重命名变量...')。
问题是:Electron不支持window.prompt()
,如果我按原样放置代码,它就不会做任何事情,因此,在搜索了一下后,我了解到你可以覆盖{ {1}}使用你自己的。我猜:所以你可以使用Blockly.prompt
我安装了electron-prompt
,并尝试使用它在新的提示窗口中获取用户的输入,然后将其发送回Blockly处理重命名的核心功能。这是我正在尝试的内容:
window.prompt()
编辑:来自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}));
};
的源代码为here,通过查看和尝试从here进行调整的信息,我更改为上面的代码,推断{{1} } 返回一个承诺。但是,electron-prompt
中的prompt
似乎没有通过callback
中打开的模态等待输入并抛出错误,但是如果我使用一个简单的函数只返回一个Blockly.prompt
中的字符串,它按预期工作......
现在我很困惑,如果它仍然使用Promise错误或setPrompt()
中的callback
不支持"等待承诺" 34; ...
希望这有助于解释我在查找有关此问题的更多信息后尝试使用的内容。
答案 0 :(得分:1)
我设法解决了这个问题,如果有人需要有关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))})
}