I have this control for loading a SVG-document (works, the SVG displays fine)
enyo.kind({
name: "SvgParser",
kind:"Control",
fit: true,
published: {
source:''
},
components:[{
tag: "object", // Or Embed
name:'svgObject',
classes: 'SvgObject',
ontap:'click',
onload:'loaded'
}],
create: function() {
this.inherited(arguments);
this.sourceChanged();
},
click: function(inSender, inEvent) {
console.log('click'); // doesn't happen
},
sourceChanged: function() {
this.$.svgObject.attributes.type = 'image/svg+xml';
this.$.svgObject.attributes.data = this.source;
},
loaded: function(inSender, inEvent) {
console.log('loaded'); // doesn't happen
}
});
but the event-handlers for ‘tap’ and ‘load’ never are triggered, can somebody explain me what i’m doing wrong? Thanks in advance
You actually have two separate problems, one preventing the
loadhandler from working and the other preventing thetaphandler from working.The
loadhandler isn’t being called because you need to tell Enyo to listen for theloadevent on the<object>tag. You can do this with a call toenyo.makeBubble().The
taphandler isn’t being called because click/tap events on an<object>tag containing an SVG image are routed into the DOM of the image itself. To intercept them in HTML, you’ll need to wrap the<object>in a transparent<div>and give the<object>a negativez-index.I’ve made a fiddle illustrating both techniques here: http://jsfiddle.net/rbWMr/
For background on the SVG-wrapping technique, see Making an svg image object clickable with onclick, avoiding absolute positioning.