Konstantin18ko
@Konstantin18ko
Стоматолог

Как добавить новую модель на основе уже созданной?

Данный участок перебирает даты в массиве и добавляет в них комнаты:

while (itr.hasNext()) {
                    this.period[moment(itr.next().toDate()).format("YYYY-MM-DD")] = this.rooms
                }

Но модель комнат одинакова на все даты, а следовательно добавляя в одну комнату человека, человек появляется во всех комнатах и датах.
Пытался сделать так:

while (itr.hasNext()) {
                    this.period[moment(itr.next().toDate()).format("YYYY-MM-DD")] = (...this.rooms)
                }

Не прокатывает.
Смысл такой:

2018-05-31 -- КОМНАТА_1 -- ИВАНОВ И.И.
                        -- БАБУШКИН Б.Б
           -- КОМНАТА_2 -- ЛОПУХОВ Л.Л.
2018-06-01 -- КОМНАТА_1 -- ВАСИЛЬЕВ В.В.
                        -- ТАРАНТАЙКИН Т.Т.

А получается так:

2018-05-31 -- КОМНАТА_1 -- ИВАНОВ И.И.
                        -- БАБУШКИН Б.Б
           -- КОМНАТА_2 -- ЛОПУХОВ Л.Л.
2018-06-01 -- КОМНАТА_1 -- ИВАНОВ И.И.
                        -- БАБУШКИН Б.Б
           -- КОМНАТА_2 -- ЛОПУХОВ Л.Л.

Как добавить новый экземпляр комнат к дате?
  • Вопрос задан
  • 79 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега Vue.js
А что такое this.rooms - массив, объект, есть ли у него вложенные объекты? Раз уж решили не показывать, что это такое...

Можно вместо this.rooms попробовать присваивать JSON.parse(JSON.stringify(this.rooms)) (правда, если внутри есть методы, они отвалятся).

Или можно воспользоваться _.cloneDeep или каким-нибудь аналогом, или реализовать его самостоятельно.

Или можно добавить в компонент метод, который будет возвращать дефолтное значение rooms (т.е., создавать новый объект при каждом вызове), и, когда понадобится ещё один экземпляр rooms, вместо обращения к this.rooms использовать этот метод:

methods: {
  createRooms() {
    return {
      ...
    };
  },
  ...

this.period[moment(itr.next().toDate()).format('YYYY-MM-DD')] = this.createRooms();
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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