0

大编辑

分析了我的情况,这似乎是另一个问题/另一种情况,更普遍的是关于保存到 json。

因此,我使用以下代码向舞台上的图层添加了一个新的 Shapegroup:

...
var selectedShape, json = null;
...
function addNode(xPos, yPos)
{
    //create the new node
    var node = new Kinetic.Circle({
        id: 'myRect',
        x: xPos,
        y: yPos,
        radius: 30,
        fill: '#FFFFFF',
        stroke: '#000000',
        strokeWidth: 4,
        // test: "testattr"
    });

    // create the label
    var label = new Kinetic.Text({
        x: node.getX() - node.getRadius() + 10,
        y: node.getY() + node.getRadius() + 4,
        text: 'node',
        fontSize: 12,
        fontFamily: 'Arial',
        fill: 'black',
    });

    // create group
    var nodeGroup = new Kinetic.Group({
        draggable: true
    });

    // add shapes to group
    nodeGroup.add(node);
    nodeGroup.add(label);

    // add group to the layer
    layer.add(nodeGroup);

    // add layer to the stage
    stage.add(layer);


    /*
    *  Events for Nodes
    *  all events for the actual states / nodes
    */

    // mouse over => red stroke
    node.on('mouseover', function() {
        $('body').css('cursor', 'pointer');
        this.setStroke('red');
        layer.draw();
    });
    // mouse out => back in black
    node.on('mouseout', function() {
        if(selectedShape != this){
            console.log('mouseout fired, Position: ' + node.getX());
            $('body').css('cursor', 'default');
            this.setStroke('#000000');
            writeMessage(messageLayer, node.getX()); // just for testing purposes
            layer.draw();
        }
    });
    node.on('click tap', function(){ //relevant
        if(selectedShape != null){
            $('body').css('cursor', 'default');
            selectedShape.setStroke('#000000');
            layer.draw();
        }
        selectedShape = null;
        console.log('clicked');
        selectedShape = this;
        this.setStroke('red');
        layer.draw();
    });

    /*
    *  Events for Node-labels
    *  events for labels
    */
    label.on('mouseover', function() {
        $('body').css('cursor', 'text');
        this.setStroke('red');
        this.setStrokeWidth(0.5)
        layer.draw();
    });

    label.on('mouseout', function() {
        $('body').css('cursor', 'default');
        this.setStroke('');
        this.setStrokeWidth(0);
        layer.draw();
    });

    //change the Label of a node, return 'node' if nothing entered or cancelled.
    label.on('click', function(){
        var lblTxt = prompt('Neue Bezeichnung:', ''); 
        if (lblTxt) {
            this.setText(lblTxt);
        } else {
            this.setText('node');
        }
        layer.draw();
    });
}

有一个按钮“添加新状态”,它实际上添加了一个新组。代码:

$('#createNode').click(function(e){
        addNode(125, 125);
    });

还有一个“删除状态”按钮,用于删除选定的节点组。代码:

$('#removeNode').click(function(e){
        if(selectedShape){
        var selectedGroup = selectedShape.getParent();
        selectedGroup.removeChildren();
        selectedGroup.remove();
        layer.draw();
        } else {
            writeMessage(messageLayer, 'No Object chosen');
        }
    });

此外,还有一个“保存到 json”按钮,我想在其中保存舞台上所有实际剩余的形状。代码:

        $('#saveJSON').click(function(e){
         json = null;
        json = stage.toJSON();
        console.log(json);
    });

所以,现在我测试以下情况:

案例1:保存空阶段

JSON输出:

{
"attrs": {
    "width": 960,
    "height": 600
},
"className": "Stage",
"children": [
    {
        "attrs": {},
        "className": "Layer",
        "children": []
    }
]

}

状态:好像没问题。因此,最后一个 } 的格式问题取决于 stackoverflow,它应该(并且是)实际上包含在代码标记中。

案例2:保存空舞台后添加一个节点(这里双击/点击或使用按钮没有区别)。再次保存。

JSON输出:

{
"attrs": {
    "width": 960,
    "height": 600
},
"className": "Stage",
"children": [
    {
        "attrs": {},
        "className": "Layer",
        "children": []
    },
    {
        "attrs": {},
        "className": "Layer",
        "children": [
            {
                "attrs": {
                    "draggable": true
                },
                "className": "Group",
                "children": [
                    {
                        "attrs": {
                            "id": "myRect",
                            "x": 125,
                            "y": 125,
                            "radius": 30,
                            "fill": "#FFFFFF",
                            "stroke": "#000000",
                            "strokeWidth": 4,
                            "test": "testattr"
                        },
                        "className": "Circle"
                    },
                    {
                        "attrs": {
                            "width": "auto",
                            "height": "auto",
                            "x": 105,
                            "y": 159,
                            "text": "node",
                            "fontSize": 12,
                            "fontFamily": "Arial",
                            "fill": "black"
                        },
                        "className": "Text"
                    }
                ]
            }
        ]
    }
]

}

状态:为什么有一个空层?但是:一组,两个对象,似乎还可以。

案例3

添加另一个节点。节省。

JSON输出:

{
"attrs": {
    "width": 960,
    "height": 600
},
"className": "Stage",
"children": [
    {
        "attrs": {},
        "className": "Layer",
        "children": []
    },
    {
        "attrs": {},
        "className": "Layer",
        "children": [
            {
                "attrs": {
                    "draggable": true
                },
                "className": "Group",
                "children": [
                    {
                        "attrs": {
                            "id": "myRect",
                            "x": 125,
                            "y": 125,
                            "radius": 30,
                            "fill": "#FFFFFF",
                            "stroke": "#000000",
                            "strokeWidth": 4,
                            "test": "testattr"
                        },
                        "className": "Circle"
                    },
                    {
                        "attrs": {
                            "width": "auto",
                            "height": "auto",
                            "x": 105,
                            "y": 159,
                            "text": "node",
                            "fontSize": 12,
                            "fontFamily": "Arial",
                            "fill": "black"
                        },
                        "className": "Text"
                    }
                ]
            },
            {
                "attrs": {
                    "draggable": true,
                    "x": 206,
                    "y": 75,
                    "rotation": 0,
                    "scaleX": 1,
                    "scaleY": 1,
                    "offsetX": 0,
                    "offsetY": 0,
                    "skewX": 0,
                    "skewY": 0
                },
                "className": "Group",
                "children": [
                    {
                        "attrs": {
                            "id": "myRect",
                            "x": 125,
                            "y": 125,
                            "radius": 30,
                            "fill": "#FFFFFF",
                            "stroke": "red",
                            "strokeWidth": 4,
                            "test": "testattr"
                        },
                        "className": "Circle"
                    },
                    {
                        "attrs": {
                            "width": "auto",
                            "height": "auto",
                            "x": 105,
                            "y": 159,
                            "text": "node",
                            "fontSize": 12,
                            "fontFamily": "Arial",
                            "fill": "black"
                        },
                        "className": "Text"
                    }
                ]
            }
        ]
    },
    {
        "attrs": {},
        "className": "Layer",
        "children": [
            {
                "attrs": {
                    "draggable": true
                },
                "className": "Group",
                "children": [
                    {
                        "attrs": {
                            "id": "myRect",
                            "x": 125,
                            "y": 125,
                            "radius": 30,
                            "fill": "#FFFFFF",
                            "stroke": "#000000",
                            "strokeWidth": 4,
                            "test": "testattr"
                        },
                        "className": "Circle"
                    },
                    {
                        "attrs": {
                            "width": "auto",
                            "height": "auto",
                            "x": 105,
                            "y": 159,
                            "text": "node",
                            "fontSize": 12,
                            "fontFamily": "Arial",
                            "fill": "black"
                        },
                        "className": "Text"
                    }
                ]
            },
            {
                "attrs": {
                    "draggable": true,
                    "x": 206,
                    "y": 75,
                    "rotation": 0,
                    "scaleX": 1,
                    "scaleY": 1,
                    "offsetX": 0,
                    "offsetY": 0,
                    "skewX": 0,
                    "skewY": 0
                },
                "className": "Group",
                "children": [
                    {
                        "attrs": {
                            "id": "myRect",
                            "x": 125,
                            "y": 125,
                            "radius": 30,
                            "fill": "#FFFFFF",
                            "stroke": "red",
                            "strokeWidth": 4,
                            "test": "testattr"
                        },
                        "className": "Circle"
                    },
                    {
                        "attrs": {
                            "width": "auto",
                            "height": "auto",
                            "x": 105,
                            "y": 159,
                            "text": "node",
                            "fontSize": 12,
                            "fontFamily": "Arial",
                            "fill": "black"
                        },
                        "className": "Text"
                    }
                ]
            }
        ]
    }
]

}

状态:在这里你可以看到我的问题的第一次出现:我舞台上的所有对象都在我的 JSON 文件中的两个不同层上加倍。因此,当添加更多对象时,它们会增加三倍,依此类推。我的问题:我想添加一个数据模型并将数据与数据库一起使用,所以我认为这很混乱,但我不知道我哪里出错了。

** 案例 4** 从我的舞台上删除除一个节点外的所有节点:

JSON输出:

{
"attrs": {
    "width": 960,
    "height": 600
},
"className": "Stage",
"children": [
    {
        "attrs": {},
        "className": "Layer",
        "children": []
    },
    {
        "attrs": {},
        "className": "Layer",
        "children": [
            {
                "attrs": {
                    "draggable": true
                },
                "className": "Group",
                "children": [
                    {
                        "attrs": {
                            "id": "myRect",
                            "x": 125,
                            "y": 125,
                            "radius": 30,
                            "fill": "#FFFFFF",
                            "stroke": "#000000",
                            "strokeWidth": 4,
                            "test": "testattr"
                        },
                        "className": "Circle"
                    },
                    {
                        "attrs": {
                            "width": "auto",
                            "height": "auto",
                            "x": 105,
                            "y": 159,
                            "text": "node",
                            "fontSize": 12,
                            "fontFamily": "Arial",
                            "fill": "black"
                        },
                        "className": "Text"
                    }
                ]
            }
        ]
    },
    {
        "attrs": {},
        "className": "Layer",
        "children": [
            {
                "attrs": {
                    "draggable": true
                },
                "className": "Group",
                "children": [
                    {
                        "attrs": {
                            "id": "myRect",
                            "x": 125,
                            "y": 125,
                            "radius": 30,
                            "fill": "#FFFFFF",
                            "stroke": "#000000",
                            "strokeWidth": 4,
                            "test": "testattr"
                        },
                        "className": "Circle"
                    },
                    {
                        "attrs": {
                            "width": "auto",
                            "height": "auto",
                            "x": 105,
                            "y": 159,
                            "text": "node",
                            "fontSize": 12,
                            "fontFamily": "Arial",
                            "fill": "black"
                        },
                        "className": "Text"
                    }
                ]
            }
        ]
    }
]

}

状态:同样,剩余节点翻倍。

**案例5**:移除所有节点,再次有一个空阶段(添加2个节点后,然后移除它们)

JSON输出:

{
"attrs": {
    "width": 960,
    "height": 600
},
"className": "Stage",
"children": [
    {
        "attrs": {},
        "className": "Layer",
        "children": []
    },
    {
        "attrs": {},
        "className": "Layer",
        "children": []
    },
    {
        "attrs": {},
        "className": "Layer",
        "children": []
    }
]

}

状态:阶段为空,但仍保留层。不是很好。

结论:我认为我做错了什么。这个问题中有很多 JSON,我希望有人真正通读这个问题,并可以帮助我弄清楚我做错了什么。会很棒。

最好的问候, 多米尼克

另一个编辑 问题似乎是在 addnode-function 中,使用 stage.add(layer); 添加新的形状组。非常感谢一种将新组添加到一层的不同方法,因为我对 kineticjs 还很陌生并且还不知道它。

4

1 回答 1

3

所以,写完这个问题,重写整个问题,在进一步调查后添加另一个编辑,我实际上发现了我的问题,我想我想和你分享一下:

在 addnode-function 中,我调用stage.add(layer)了 - 正如代码所说,它为每个新的 Shapegroup 添加了一个新层。这导致了我在问题中解释的行为。

现在我stage.add(layer)从 addNode 删除到我的init()-function ,它只在启动时调用。在 addNode,我现在只说layer.add(nodeGroup); layer.draw();它现在就像一个魅力。很抱歉给您带来不便:(我脑子里有个结。

于 2013-07-03T11:07:28.207 回答