2014-02-01 1 views
6

Мне любопытно, можно ли изменить сообщение по умолчанию приглашения в зависимости от того, какой пользователь выбрал из предыдущей подсказки.Можно ли изменить значение по умолчанию: в Yeoman в зависимости от предыдущего ответа?

В настоящее время мое первое приглашение - это список, в котором пользователь выбирает один вариант, и ему задают еще несколько вопросов. Обратите внимание, что эти два запуска в двух различных генераторов

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; 
     }, 

Возможно ли изменить сообщение по умолчанию здесь? Это всего лишь незначительные вещи, но мне интересно, возможно ли это. Заранее спасибо.

ответ

9

Это общее решение для тех, кто ищет ответ на вопрос. default свойство принимает функцию и передает объект со всеми предыдущими ответами на него. Используйте этот объект для генерации значений по умолчанию во время выполнения:

this.prompt([{ 
    name: 'title', 
    message: 'Your title?', 
    default: 'Mr.' 
}, { 
    name: 'name', 
    message: 'Your name?', 
    default: function(answers) { 
    return answers.title + ' Smith'; 
    } 
}]); 
0

Хорошо, я действительно понял это самостоятельно. Я должен был объявить переменную questionOneDefaultDirectory, а затем запустить if/else, если справа внизу, а затем вызвать эту переменную из приглашения. Код выглядит так:

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 
    } 

Теперь, в зависимости от того, что выбрано в течение первого вопроса, каталог по умолчанию будет меняться в зависимости от того, на что был дан ответ.

Смежные вопросы