2013-12-20 34 views
0

我目前正在开发一个jQuery移动应用程序。在一个页面上有一个图表(高图),然后可以导出(canvg和canvas2ImagePlugin)。但是,我注意到图表对象保留在内存中。这样做的结果是,如果多次打开页面并按下导出按钮,则会导出先前生成的所有图形。

看看Chrome Dev Tool的堆快照,我发现所有对象都留在内存中。为了演示这一点,我在jsfiddle上做了一个非常基本的应用程序,将所有的高级代码和密码代码排除在外:http://jsfiddle.net/dreischer/Lt4Xw/ - >只需点击按钮即可进入第二页。如果你点击导出按钮,弹出窗口会打开。但是,如果您返回到第一页然后再按第二页并再次单击该按钮,则会打开两个弹出窗口(您可能需要允许弹出窗口)。jQuery Mobile对象留在内存中

我也尝试设置analyseGraph null或undefined或在pagebeforehide上使用.remove(),但它没有帮助。

谢谢你的帮助!

下面是代码,在这个例子:
HTML:

<div data-role="page" id="p1"> 
     <div data-role="header"><h1>Header Page 1</h1></div> 
     <div data-role="content"> 
      <p>Page 1</p> 
      <a href="#p2" data-role="button">Go To Page 2</a> 
     </div> 
    </div> 

    <div data-role="page" id="p2"> 
     <div data-role="header" data-rel="back"><h1>Header Page 2</h1></div> 
     <div data-role="content"> 
      <p>Page 2</p> 
      <a href="#p1" data-role="button">Go To Page 1</a> 
      <a id="export_graph" data-role="button" style="max-width: 300px;" data-mini="true">Export</a> 
     </div>  
    </div> 

的Javascript

$(document).on('pagebeforeshow', '#p2', function(){ 

    var Graph = function(){ 
     this.drawGraph = function(){}; 
     this.exportCanvas = function(){ 
      window.open(); 
     };   
    } 

    var analyseGraph = new Graph(); 
    analyseGraph.drawGraph(); 
    $(document).on('click', '#export_graph', function(){ 
     analyseGraph.exportCanvas(); 
    }); 

}); 

回答

0

每次显示2页时,你点击事件绑定文件。所以我认为你必须偶尔使用'off',就像this

$(document).on('click', '#export_graph', function(){ 
    analyseGraph.exportCanvas(); 
    $(document).off('click'); 
});