我很好奇是否可以更改提示的默认消息,具体取决于用户从之前的提示中选择的内容。
现在我的第一个提示只是一个列表,用户选择一个选项,并询问其他一些问题。请注意,这两个在两个不同的生成器中运行
YeomanGenerator.prototype.askForThings = function askForThings() {
var cb = this.async();
var prompts = [{
name: 'questionOne',
type: 'list',
message: 'Message, message?',
choices: ['optionOne', 'optionTwo', 'optionThree', 'optionFour', 'optionFive', 'optionSix', 'None'],
filter: function(value) {
return value.toLowerCase();
}
}
然后,在下一部分中,将询问用户放置此目录的目录。但是,我想知道是否可以根据用户在questionOne
中选择的内容来更改默认位置。现在,default
选项只是空的。
YeomanGenerator.prototype.askForMoreThings = function askForMoreThings() {
var cb = this.async();
var questionOne = this.questionOne;
{
name: 'questionOneDirectory',
message: 'Question question',
default: function(default) {
if (this.questionOne === 'optionOne') {
this.default("'/directory/_one'");
}
else if (this.questionOne === 'optionTwo') {
this.default("'/directory/_two'");
}
{
//etc
}
},
filter: function(value) { return value.split('/').pop(); },
when: function() {
return questionOne;
},
甚至可以在此更改默认消息吗?这只是一件小事,但我想知道它是否可能。提前谢谢。
答案 0 :(得分:11)
以下是搜索问题主题答案的人的通用解决方案。 default
属性接受一个函数,并传递一个包含所有先前答案的对象。使用该对象在运行时生成默认值:
this.prompt([{
name: 'title',
message: 'Your title?',
default: 'Mr.'
}, {
name: 'name',
message: 'Your name?',
default: function(answers) {
return answers.title + ' Smith';
}
}]);
答案 1 :(得分:0)
好吧,我实际上是靠自己想出来的。我必须声明一个变量questionOneDefaultDirectory
,然后在下面运行if / else if,然后从提示符中调用该变量。代码现在看起来像这样:
YeomanGenerator.prototype.askForThings = function askForThings() {
var cb = this.async();
var prompts = [{
name: 'questionOne',
type: 'list',
message: 'Message, message?',
choices: ['optionOne', 'optionTwo', 'optionThree', 'optionFour', 'optionFive', 'optionSix', 'None']
}
然后是最后一部分。
YeomanGenerator.prototype.askForMoreThings = function askForMoreThings() {
var questionOne = this.questionOne;
var cb = this.async();
var questionOneDefaultDirectory;
if (this.questionOne === 'optionOne') {
questionOneDefaultDirectory = '/directory/_one'
}
else if (this.questionOne === 'optionTwo') {
questionOneDefaultDirectory = '/directory/_two'
}
{
//etc
}
this.prompt([{
name: 'questionOneDirectory',
message: 'Question question',
default: questionOneDefaultDirectory,
filter: function(value) { return value.split('/').pop(); },
when: function() {
return questionOne;
}
}], function (etcetc) {
// etc
}
现在,根据第一个问题中选择的内容,默认目录将根据回答的内容而改变。