Хорошо, для всех, кто заинтересован, я получил его на работу.Я решил это с компонентом обертки.Проверьте this Codeopen для решения.
Это обертка, которая выполняет тяжелую работу:
<template id="checkboxToggle">
<div>
<v-checkbox
:label="`Checkbox ${item.id}: ${item.selected}`"
v-model="value"
>
</v-checkbox>
</div>
</template>
И это вычисляемое свойство с get
и set
:
const CheckboxToggle = Vue.component('checkboxToggle', {
template: "#checkboxToggle",
props: ['item'],
computed: {
value: {
get() {
console.log('checkboxToggle::value::get', this.item.selected)
return this.item.selected;
},
set(val) {
const check = val ? true : false
console.log('checkboxToggle::value::set::mutation', check, this.item.id)
this.$store.commit('updateFilter', { filter: this.item, check })
},
},
}
})
И это мутация магазина:
mutations: {
updateFilter: (state, { filter, check }) => {
console.log('mutations::filterCheck::item', filter, check)
const match = state.checkboxes.filter(item => item.id === filter.id)[0]
console.log('mutations::filterCheck::match', match)
match.selected = check
}
}
Вдохновение пришло из этого Stackoverflow вопрос .Он делает это окольным путем.