Использование пользовательских объектов модели в качестве поставщика v-for во Vue?

Новичок в Vue - учусь, пока я исследую.

Я пытаюсь использовать настраиваемый объект в качестве источника данных для ситуации v-for. Пока не работает - признаю, я не уверен, как получить доступ к данным по имени в компоненте Vue.

main.js

import Vue from "vue";

import App from "./App.vue";
import router from "./router";
import store from "./store";
import VueKonva from "vue-konva";
Vue.use(VueKonva);

import RoomBuilder from "@/model/RoomBuilder";

Vue.config.productionTip = false;

new Vue({
  router,
  store,
  render: h => h(App),
  data: () => ({
    roomBuilder: new RoomBuilder()
  })
}).$mount("#app");

Настраиваемый объект, который нельзя напрямую подключить к поставщику данных, - roomBuilder.

Затем в компоненте, в котором я хочу сослаться на этот объект, у меня есть этот код:

<template>
  <v-stage ref="stage" :config="stageSize">
    <v-layer>
      <v-rect ref="background" :config="backgroundConfig"></v-rect>
      <v-rect
        v-for="room in roomBuilder.getRooms()"
        :key="room.id"
        :config="room.config"
      ></v-rect>
    </v-layer>
  </v-stage>
</template>

<script>
export default {
  name: "RoomGrid",
  data() {
    return {
      stageSize: {
        width: 1000,
        height: 1000
      },
      backgroundConfig: {
        width: 50,
        height: 50,
        fill: "#2B2B2B"
      }
    };
  },
  mounted() {
    this.$nextTick(function() {
      window.addEventListener("resize", this.fitStageIntoParentContainer);
      this.fitStageIntoParentContainer();
    });
  },
  methods: {
    fitStageIntoParentContainer() {
      const parentElement = this.$parent.$el;
      const background = this.$refs.background.getNode();
      background
        .setAttr("width", parentElement.clientWidth)
        .setAttr("height", parentElement.clientHeight);
    }
  }
};
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped lang="scss"></style>

Вот два POJO:

RoomBuilder.js

import Room from "@/model/Room";

class RoomBuilder {
  construct() {
    this.rooms = [new Room(1)];
  }

  drawOnto(konvaStage) {
    console.log(konvaStage);
  }

  getRooms() {
    return this.rooms;
  }
}

export default RoomBuilder;

а также

Room.js

class Room {
  construct(id) {
    this.id = id;
    this.config = {
      x: 10,
      y: 10,
      fill: "white",
      width: 10,
      height: 10
    };
  }
}

export default Room;

Спасибо, и полегче со мной. Обычно я работаю на стороне сервера! Я явно что-то неправильно подключил... пробовал

v-for="комната в этом. $data.roomBuilder.getRooms()"

v-for="комната в roomBuilder.getRooms()"

и т.п.

Очевидно, здесь творится какое-то волшебство, которого я не понимаю!

Спасибо!

0 ответов

Другие вопросы по тегам