Giter VIP home page Giter VIP logo

Comments (8)

michaeljota avatar michaeljota commented on June 19, 2024

Somehow, the document still open after the save() function.

update codes:

    addWhiteboard () {
        this._indexWb = this.whiteboards.push(Whiteboard.create());
    };

    addShape (data) {
        var shape = Shape.create({
            type: data.type
        });
        this._indexShape = this.whiteboards[this._indexWb-1].shapes.push(shape);
    };

    getShape () {
        return this.whiteboards[this._indexWb-1].shapes[this._indexShape-1].toJSON();
    }

    addPoint (point) {
        this.whiteboards[this._indexWb-1].shapes[this._indexShape-1].points.push(Point.create({
            x: point.x,
            y: point.y
        }))
    }

Now they are part of the document.

Am I doing something wrong?

from camo.

michaeljota avatar michaeljota commented on June 19, 2024

I am, at this time, not able to update none of the index. Even if I set them in those function, there are resetting.

from camo.

scottwrobinson avatar scottwrobinson commented on June 19, 2024

Hi Michael,

A couple quick notes:

  • Make sure you're calling .save() on all updated objects and all new objects created with .create(). I see in the code above that there are a few objects created (Whiteboard, Shape, Point) that don't have .save() called
  • Calling .save() on an object does not call .save() on its referenced objects. Every new or updated object needs to have .save() called explicitly

When you say "The problem I'm facing is, when I update an array inside another array, I can't access that document anymore", do you mean this line?

classroom.whiteboards[classroom.whiteboards.length-1].shapes.push(shape);

I'll do some testing and see if I can find any problems. It might be helpful if you could post the code for the Classroom and Whiteboard classes. You don't have to post all of it, at least the relevant parts of the schema.

Thanks.

from camo.

michaeljota avatar michaeljota commented on June 19, 2024

Whiteboard, Shape and Point are EmbeddedDocument. I tried to save them, but it throws "save()" it's undefined.

class Classroom extends Document {
    constructor() {
        super();

        this.className = {
            type: String,
            required: true
        };

        this.date = {
            type: Date,
            default: Date.now()
        };

        this.whiteboards = {
            type: [Whiteboard],
            default: [Whiteboard.create()]
        };

        this._indexWb = 0;
        this._indexShape = -1;
    }

    get indexWb () {
        return this._indexShape;
    }

    set indexWb (value) {
        console.log('indexWb: '+value);
        this._indexShape = value;
    }

    get indexShape() {
        return this._indexShape;
    }

    set indexShape(value) {
        console.log('indexShape: '+value);
        this._indexShape = value;
    }

    addWhiteboard () {
        this.indexWb = this.whiteboards.push(Whiteboard.create());
    };

    addShape (data) {
        var shape = Shape.create({
            type: data.type
        });
        this.indexShape = this.whiteboards[this.indexWb].shapes.push(shape);
    };

    getShape () {
        return this.whiteboards[this.indexWb].shapes[this.indexShape].toJSON();
    }

    addPoint (point) {
        this.whiteboards[this.indexWb].shapes[this.indexShape].points.push(Point.create({
            x: point.x,
            y: point.y
        }))
    }
}

This is the current class of the Classroom document. I change things to test. There is no way to update either of the _index, not even with the index get and set (BTW, because of the getters and setters being publics, now the document save them).

I will just move on and use standard Document. I think that may solve the problem. I'll let you know. Thanks!

from camo.

scottwrobinson avatar scottwrobinson commented on June 19, 2024

Ah, okay, I didn't realize Whiteboard, Shape and Point were EmbeddedDocuments. That makes a lot more sense.

I think you may have found an issue with saving nested arrays, so I'll look in to it.

Thanks!

from camo.

michaeljota avatar michaeljota commented on June 19, 2024

I think it maybe related to a nested arrays of EmbeddedDocuments. I'm unable right now to test it. But next week or so, I'll help you properly reporting a playable scenario.

from camo.

scottwrobinson avatar scottwrobinson commented on June 19, 2024

Found the issue. You're right, there is a problem saving/loading deeply nested EmbeddedDocuments. I'll be committing the fix shortly.

Thanks for pointing this out!

from camo.

michaeljota avatar michaeljota commented on June 19, 2024

Glad I could help.

from camo.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.