2
我想有正常的.command()
处理程序,它执行一些异步调用,然后决定它是否会输出或将用户引入模式。那可能吗?如何以编程方式进入模式?
如果是的话,我如何设置基于我的异步调用的分隔符?我可以动态设置此模式的自定义.action()
功能吗?
另外,是否有可能传递一个上下文到这个动态创建的模式?
我想有正常的.command()
处理程序,它执行一些异步调用,然后决定它是否会输出或将用户引入模式。那可能吗?如何以编程方式进入模式?
如果是的话,我如何设置基于我的异步调用的分隔符?我可以动态设置此模式的自定义.action()
功能吗?
另外,是否有可能传递一个上下文到这个动态创建的模式?
您可以使用完全不同的一组命令创建第二个(或多个)Vorpal实例。这些也可以在运行中声明。
通过在新实例上调用vorpal.show()
,这将在该“模式”期间将UI从旧Vorpal“分离”到新的上,并且对于用户来说,对于用户来说,你得到了一组全新的命令,分隔符等。
var modeA = new Vorpal().delimiter('fooland:');
var modeB = new Vorpal().delimiter('barland:');
modeA.command('foo'); // ...
modeB.command('bar'); // ...
// Only foo is present as a command.
modeA.show();
setTimeout(function(){
// Now bar is present as a command instead.
modeB.show();
}, 5000);
也许这是有效的,但它不能解决问题。这样做和声明普通模式一样,在'.init()'上工作,然后进入静态声明的模式。也许还不清楚,但我希望以编程方式进入模式的要点是能够在模式被调用时在其中设置事物 - 动态操作处理程序,动态分隔符。 – fiatjaf
啊。我见过的其他人做的事情是创建第二个(或多个)Vorpal实例,它们具有完全不同的一组命令(您可以随时声明这些命令),然后只需调用vorpal.show()新的实例。这将在旧的Vorpal上将用户界面“分离”到新的“模式”,并且用户看起来会得到一组全新的命令,分隔符等。我是否正确理解了你这次? – dthree
是的,这是一个很好的解决方案。文档应该提到这一点,因为虽然它在那里,但很容易错过这种可能性 - 这是一个强大的可能性。 – fiatjaf