【问题标题】:recording object state for serialization记录对象状态以进行序列化
【发布时间】:2011-12-17 04:56:43
【问题描述】:

我正在尝试找到一种方法来记录画布上不同对象(图像、形状、选择框)的状态,以便将其全部序列化为 XML 或 JSON。我尝试将每个对象放入一个全局数组中:

var shapeState = { //Example of a shape being recorded
                            number:increment,
                            id:thisCanvas,
                            type:'shape',
                            kind:shapeKind,
                            cheight:canvasHeight,
                            cwidth:canvasWidth,
                            height:shapeHeight,
                            width:shapeWidth,
                            color:shapeColor,
                            x:xPos,
                            y:yPos
                        }

                        totalState.push(shapeState); //State of shape data has been stored in global array

但这仅在形状(或其他对象)是静态的情况下才有效。例如,如果我移动元素(单击“移动”按钮后),如何更新xPos 属性?形状对象已经被放置在数组中并且无法通过名称来识别。假设全局数组中有 100 多个形状,我如何才能找到要更新的特定形状?请帮忙。

这里是小提琴:http://jsfiddle.net/RymyY/5/

【问题讨论】:

    标签: javascript jquery oop


    【解决方案1】:

    这是一种方法:

    var AllShapeStates = {};
    
    function Shape() {
        var SerializedState = {},
            number,
            thisCanvas,
            etc;
        AllShapeStates[UNIQUE_IDENTIFYING_ATTRIBUTE] = SerializedState;
        //Shape Business
    
        this.updateState = function(){
            SerializedState.number = number;
            SerializedState.id = thisCanvas;
            //etc
        }
    }
    

    在此模型中,当 Shape 被实例化时,它会将对其 SerializedState 的引用添加到全局 AllShapestates 变量中;每当Shape 更新它的状态时,它应该调用updateState,它会更新它的SerializedState 对象;

    【讨论】:

    • @Shad--我不明白您的解决方案将如何持续超过一次观看的生命周期。如果用户决定退出页面访问不同的站点然后又回来,这些形状就会消失。我对 ASP.NET 不太了解,但也许这里可以使用 [_VIEWSTATE] 变量?
    • @codeninja 您的问题被标记为 JavaScript,我不明白 .NET 的来源。在我的回答中,对于任何给定的形状,始终可以在 AllShapeStates 内部访问准确的状态。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-11
    • 2012-02-29
    • 1970-01-01
    相关资源
    最近更新 更多