Javascript 使用Enyo 2.0中的SVG控件处理事件(对象或嵌入标记)
我有这个控件来加载SVG文档(工作正常,SVG显示良好)Javascript 使用Enyo 2.0中的SVG控件处理事件(对象或嵌入标记),javascript,html,events,svg,enyo,Javascript,Html,Events,Svg,Enyo,我有这个控件来加载SVG文档(工作正常,SVG显示良好) 但是“tap”和“load”的事件处理程序从未被触发,有人能解释一下我做错了什么吗?提前感谢事件不会被触发,因为您试图在尚未创建Enyo组件的DOM节点时修改DOM节点属性。DOM节点是在呈现组件时创建的。将sourceChanged()函数移动到控件的rendered()函数中,或者如果在控件的create()函数中需要它,请在控件上调用hasNode(),强制它首先创建DOM节点。尝试此版本的sourceChanged()函数,看看它
但是“tap”和“load”的事件处理程序从未被触发,有人能解释一下我做错了什么吗?提前感谢事件不会被触发,因为您试图在尚未创建Enyo组件的DOM节点时修改DOM节点属性。DOM节点是在呈现组件时创建的。将sourceChanged()函数移动到控件的rendered()函数中,或者如果在控件的create()函数中需要它,请在控件上调用hasNode(),强制它首先创建DOM节点。尝试此版本的sourceChanged()函数,看看它是否有效:
sourceChanged: function() {
var svgObj = this.$.svgObject;
if (svgObj.hasNode()) {
svgObj.setAttribute("type", 'image/svg+xml');
svgObj.setAttribute("data", this.source);
}
},
实际上,您有两个独立的问题,一个阻止
加载
处理程序工作,另一个阻止点击
处理程序工作
未调用load
处理程序,因为您需要告诉Enyo侦听
标记上的load
事件。您可以通过调用enyo.makeBubble()
来实现这一点
未调用tap
处理程序,因为包含SVG图像的
标记上的单击/点击事件被路由到图像本身的DOM中。要在HTML中拦截它们,您需要将
包装在透明的
中,并给
一个负数z-index
我在这里做了一个小提琴来演示这两种技术:
有关SVG包装技术的背景信息,请参阅。thx以获取快速回复,但它仍然不起作用。看来我的问题与此有关
sourceChanged: function() {
var svgObj = this.$.svgObject;
if (svgObj.hasNode()) {
svgObj.setAttribute("type", 'image/svg+xml');
svgObj.setAttribute("data", this.source);
}
},