2011-10-15 36 views
0

从ATK4页面,我可以调用jqplot使用页面我可以将javascript对象传回给atk4页面吗?

$chart = $p->add('jqplot', null, 'chart1'); 
    $chart->setSeries(array(10,20,15)); 

在这样

一个JavaScript帮手文件中定义这样

class jqplot extends View { 
    function render() 
    { 
    $plot=$this->js(true)->univ()->jqplot($this->series, $this->opts); 
    parent::render(); 
    return $this; 
    } 
} 

,并在JS一个jqplot.php助手文件,将php调用链接到javascript

$.each({ 
jqplot: function(series, opts){ 
    console.log('jqplot series',series); 
    console.log('jqplot options',opts); 
    $plot=$.jqplot(this.jquery.attr("id"), series, opts); 
    return $plot; 
} 

}

如果我在页面上有一个图表并用ajaxec调用重新加载它,它可以正常工作,但如果我有多个图表彼此相邻,则只有第一个图标可以,并且旁边的图标完全消失如果我打电话重新加载。

我真正想要做的是调用图表上的jqplot replot函数,并从页面传递新的数据,但我该如何做到这一点? jshelper中的$ plot对象包含一个JavaScript对象,我需要这个对象来调用它的replot。

我想也许我可以存储对象,当第一次创建一个JavaScript关联数组,然后当我调用replot,查找id,如果找到,调用replot对象,但不知道这段代码是什么样子或是否我有正确的方法,所以任何帮助表示赞赏。

在此先感谢您的帮助。

回答

1

这可能很难做到。首先你需要正确处理jqPlot的破坏。你需要一个合适的jQuery UI小部件,能够通过解构器恢复所有的东西。那么你可能会得到它的工作。

就Agile Toolkit而言,它使用JavaScript销毁包含jqPlot的元素,重新加载HTML并重新执行JavaScript。

+0

但是,在.js助手中是否可以将JavaScript对象存储为会话变量。如果我把它放在关联数组中的关键字是div id,那么当调用replot时,js helper可以检索原始对象并对其进行修改?所以不是真的回到atk4,只是存储JavaScript对象,而不是使用ajaxec来重新加载。 –

+0

您是否希望在ATK4会话中保存JavaScript小部件的状态?我想你可以做到这一点。为什么你需要刷新页面呢?可能不是调用reload,而是调用replot。你能解释一般你想达到什么吗? – romaninsh

+0

目前我正在重新载入包含图表的元素,但是当并排有两个图表时,这会导致其中一个在重绘之前完全消失。我真的想调用replot,但使用jqplot,replot函数需要在图表第一次创建时使用的JavaScript对象,概念上类似于series = 1,2,3; chart = jqplot(divname,series,options); newseries = 4,5,6; chart.replot(newseries);.问题是我认为当我创建图表并且这是客户端对象时,我需要将图表保存在某处。 –

相关问题