У меня есть компонент «Вопросы и ответы», написанный на VueJs, с хранилищем Vuex. Каждый ответ представляет собой элемент <textarea>
, например:
<textarea class="form-control" rows="1" data-answer="1" :value="answer(1)" @change="storeChange"></textarea>
Как видите, значение элемента управления устанавливается путем вызова метода answer()
и передачи номера вопроса в качестве параметра.
При изменении ответа вызывается метод storeChange
и изменения кэшируются во временном объекте (this.changes
) в следующем коде:
props : [
'questionnaire'
],
methods : {
answer(number) {
if (this.questionnaire.question_responses &&
(number in this.questionnaire.question_responses)) {
return this.questionnaire.question_responses[number];
}
return null;
},
storeChange(e) {
Vue.set(this.changes, e.target.dataset.answer, e.target.value);
},
save() {
// removed for clarity
},
reset() {
// what to do here?
},
}
Если пользователь нажимает кнопку сохранения, я отправляю действие, чтобы обновить магазин.
Если пользователь хочет вернуть форму в исходное состояние, мне нужно очистить this.changes
, что не проблема, но мне также нужно «обновить» значения из хранилища. Как мне это сделать?
Обратите внимание, что источник начального состояния, questionnaire
, поступает через реквизит, а не вычисляемое свойство, которое отображается непосредственно в хранилище. Причина этого в том, что на одной странице может быть несколько компонентов «Вопрос и ответ», и мне было проще передать состояние таким образом.