@Zewkin
Я у мамы фронтэндер

Как сделать это правильно?

Привет,

я снова выхожу на связь со своими велосипедами на 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.vue

const 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 внутри нее.

Вопрос - как сделать это по-человечески? Спасибо
  • Вопрос задан
  • 508 просмотров
Решения вопроса 1
kulakoff
@kulakoff Куратор тега Vue.js
Vue.js developing
Вот такой вариант, наверное он не оптимальный, но вроде решает задачу разделения данных: https://codepen.io/kerf/pen/gWzZVB .
Смысл в том, что когда нужно отображать какой-то шаблон для ячейки, то создаем отдельный компонент. В родителе описываем объект свойств, которые нужно передать и вешаем обработчик.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Sanasol
@Sanasol Куратор тега JavaScript
нельзя просто так взять и загуглить ошибку
нормальный вариант, по другому все равно нет способов скорее всего.

Делал форматтеры примерно так же через жопно, клики не приходилось, но других вариантов не вижу для клика.
https://github.com/S-anasol/siahub/blob/master/res...
https://github.com/S-anasol/siahub/blob/master/res...
Ответ написан
Fragster
@Fragster
помогло? отметь решением!
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы