Эта тема связана с этим вопросом ...
отобразить два одномерных массива в двумерный массив и затем заполнить известными значениями
в основном у меня есть три коллекции объектов: цвета, размеры и продукты. Они заполняются в данные основного компонента Vue () с помощью axios для извлечения данных из API. Продукт имеет свойства, которые ссылаются на один из цветных объектов и один из объектов размера.
В вышеупомянутом вопросе я спросил, как распределить продукты в двумерный массив цветов и размеров (не все комбинации будут существовать). Моя новая проблема заключается в том, как управлять состоянием приложения, пока я не буду готов сохранить данные обратно в хранилище данных.
Я распространяю продукты по сетке с помощью следующего кода, который является методом основного компонента Vue
buildDimensions(){
/* build a new array, pulling the SKU out to be a key so that we can map them into the grid*/
currentSKUs = this.style.skus.reduce((currentSKUs,sku) => currentSKUs.set(sku.sku,sku),new Map);
result = this.style.colours.map(
colourRow => this.style.sizes.map(
sizeColumn => ({
key: this.style.name.trim() + colourRow.colour_code.trim() + sizeColumn.size_code.trim(),
value: currentSKUs.get(
this.style.name.trim() + colourRow.colour_code.trim() + sizeColumn.size_code.trim()
) || {
colour_code: colourRow.colour_code.trim(),
size_code: sizeColumn.size_code.trim(),
lifecycle: "Not Created",
sku:this.style.name.trim() + colourRow.colour_code.trim() + sizeColumn.size_code.trim(),
selected:false
}
})
)
);
this.matrix = [];
this.matrix.push(result);
},
Итак, что я пытаюсь сделать: если продукт не существует, создайте новый объект со свойством selected: false (ПРИМЕЧАНИЕ. Selected не является свойством this.style.skus [], но все другие поля есть).
И это работает, так как во всех ячейках сетки есть объект. Проблема в том, что у меня есть некоторые функции, которые позволяют установить свойство selected в значение true или false, создав его, если оно не существует, и соответствующим образом обновить пользовательский интерфейс. Для записей, которые я создаю, где SKU не существует, это работает отлично. Для существующих SKU свойство устанавливается, но пользовательский интерфейс не обновляется. Я проследил это до того факта, что геттер и сеттер не существуют для свойства, добавленного позднее.
Как добавить свойства таким образом, чтобы геттеры и сеттеры были правильно созданы. Я не могу изменить API, поскольку выбранное свойство является свойством пользовательского интерфейса, а не постоянным атрибутом данных. Я пытался
Vue.set(sku,selected,false)
и
sku = Object.assign({}, sku,{selected:false})
при переборе результатов API перед сохранением их в объекте данных, но это тоже не сработало.
Буду очень признателен за любую помощь или предложения.
Для чего бы это ни стоило, мне не нужно свойство selected для объекта в this.style.skus, только для currentSKUs [] или объектов sku в сетке, поскольку они предназначены только для управления пользовательским интерфейсом.