首先,在在这里深入研究之前,我已经问过这个问题的更简单版本。但是,当我搜索时,事情变得更加复杂,我可以再描述一下。
我正在尝试使用 Google 的 Blockly 创建一个电子应用程序。在 Blockly 的域中重命名变量会在用户浏览器中打开一个提示,要求输入新变量的名称,正如您在它自己的网站上看到的那样(单击“计数”并选择“重命名变量...”)。
问题是: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
是在这里,并通过观察它,我试图从适应信息在这里,我改变成上述代码,推断prompt
回报的承诺。但是,似乎callback
inBlockly.prompt
不等待通过打开的模态输入setPrompt()
并引发错误,但是如果我使用一个简单的函数只是返回一个字符串 in callback
,它会按预期工作...
现在我很困惑,如果是我自己仍然使用承诺不对,或者是callback
在Blockly.prompt
不支持“等承诺” ...
希望这有助于解释我在查找有关此问题的更多信息后尝试使用的内容。
我设法解决了它,我发布它以防有人需要关于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))})
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句