在kineticjs中出口阶段的最佳方式

时间:2014-03-13 20:33:05

标签: javascript html5 html5-canvas kineticjs

我正在寻找将动力学阶段输出到json的最佳方法。是否有任何解决方案可以使用事件和自定义属性导出对象?

1 个答案:

答案 0 :(得分:2)

正如您所发现的,object.toJSON不会序列化您的事件处理程序。

所以你必须:

  • 使用toJSON序列化大部分对象,

  • 将您的KineticJS事件处理程序放在单独的.js文件中,

  • 在反序列化对象后重新连接它们。

这是一个几乎自动重新发布事件的例子:

步骤1:使用对象中定义的事件处理程序创建单独的kEvents.js文件:

// the eventHandlers object contains all the event handling functions
// for the serialized object(s).

var eventHandlers={
    myClickHandler1:function(e){alert("Fired clickHandler1");},
    myOtherClickHandler:function(e){alert("Fired the other clickHandler");},
}

步骤2:向您的Kinetic节点添加一些属性,指示要重新连接的处理程序:

// this circle will be rewired with the click handler named "myClickHandler1"

var circle1 = new Kinetic.Circle({
    x:100,
    y:100,
    radius: 30,
    fill: 'red',
    stroke: 'black',
    strokeWidth: 4,
    draggable: true,

    // Below: 
    // "clickEvent" attribute indicates this node needs their click event rewired
    // "myClickHandler1" is the name of the handler function that will be rewired

    clickEvent:"myClickHandler1"
});

步骤3:导入kEvents.js文件

<script src="http://yourSite.com/kEvents.js"></script>

步骤4:运行一个将eventHandlers处理程序附加到对象的函数:

function rewireHandlers(node){

    var handler;

    // rewire click handler

    handler=node.getAttr("clickEvent");
    if(handler && eventHandlers[handler]){
        node.on("click",eventHandlers[handler])
    }

    // rewire other event handlers the same way

}