Привет,
я снова выхожу на связь со своими велосипедами на Vue.
В порядке самообразования неспешно пилю компонент для вывода грида. Поскольку предполагается, что он должен быть переиспользуемый - никакой data-specified логики, вроде обработки событий, в нем быть не должно - поэтому я хочу вынести ее в компонент-родитель. Например:
grid.vue<td v-for="(key, index) in columns" v-html="render(entry, key, index)" @click="click(entry, index)"></td>
render: function (entry, key, index) {
if (this.columns[index].render) {
return this.columns[index].render(entry)
} else return entry[key['name']]
},
click: function (entry, index) {
if (this.columns[index].click) {
this.columns[index].click(entry)
} else return false
}
goods.vueconst gridColumns = [
{ name: 'inStock', sortable: false, label: 'Available', render: renderAvailability, click: this.changeAvailability }
]
changeAvailability (entry) {
this.updateGoods({
id: entry._id,
data: { inStock: !entry.inStock }
})
}
let renderAvailability = (entry) => '<span class="badge badge-pill badge-' + (entry.inStock ? 'success' : 'danger') + '">' + (entry.inStock ? 'In Stock' : 'Out of Stock') + '</span>'
И если с render еще куда ни шло, то вот практика пробрасывания @click таким образом кажется мне мегапохабной. Тем более, что событие в итоге вешается на td'шку, а не на нужный мне span внутри нее.
Вопрос - как сделать это по-человечески? Спасибо