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