2014-10-01 80 views
1

我有一個使用D3來顯示數據的Cordova/Ionic應用程序。D3縮放和離子popover

我用D3變焦功能,平移左右的數據

var zoomListener = d3.behavior.zoom() 
     .scaleExtent([1, 1]) 
     .x(xScale) 
     .on("zoom", function() { 
       ... 
       ... 
     }); 

    var svg = d3.select("#animation-container") 
     .append("svg") 
      .attr("id", "ecogram") 
      .attr("width", options.width) 
      .attr("height", options.height) 
      .call(zoomListener) 
      .append("g") 
       .attr("transform", "translate(" + options.margin.left + "," + options.margin.top + ")"); 

我可以點擊上保持事件偵聽器組件的SVG沒有問題,如平移之外添加離子酥料餅功能:

<h1 on-hold="openPopover($event)">Open Popover</h1> 

但是,當我將它們添加到像下面的代碼D3的SVG,然後事件不會觸發。

 xAxisGroup = svg.append("g") 
      .attr("class", "x axis"); 

     xAxisGroup 
      .append('svg:use') 
       .attr("x", options.startPinX) 
       .attr("y", options.startPinY) 
       .attr("width", options.iconWidth) 
       .attr("height", options.iconHeight * 1.3) 
       .attr("class", "ticker start-pin") 
       .attr("on-hold", "openPopover($event)") 
       .attr("xlink:href", "img/icons.svg#icon-pin"); 

是否可以同時附加D3縮放事件處理程序和點擊/等待事件處理程序?

回答

0

是的。該事件可能是觸發事件,但是您的D3代碼和Ionic代碼有不同的作用域,而且Ionic中的openPopover從SVG節點不可見,所以沒有任何反應。

有關如何重用D3中的事件處理程序代碼的提示,請參閱How to share scope between functions in d3.js?