2012-07-05 147 views
1

我正在为Catalyst MVC框架创建数据库的网页。我不是全职程序员。但是我知道perl和java的基本知识。我是一名生物学家。我写了一个有表格的模板文件(view.tt)。我需要将此表的内容链接到另一个表中,该表另外再写入一个模板文件。我无法链接这两个模板(因为我无法正确生成网址)。任何人都可以帮助或指导我解决此问题。从另一个模板调用模板

以下代码是用于第二模板文件:

<h4>Analyses Table</h4> 

<table id="analysis_table" width="90%"> 

<thead> 

<tr> 
    <th align="center" valign="center">Dataset</th> 
    <th align="center" valign="center">Tissue</th> 
    <th align="center" valign="center">Expression</th> 
    <th align="center" valign="center">Analysis</th> 
</tr> 

</thead> 
<tbody> 
[% FOREACH result IN plets -%] 
    [% IF result.analysistypename == 'Cancer' -%] 

    [% matches = result.datasetname.match('(\w+) (\w+)') %] 
    <tr> 
    <td align="left" valign="top">[% result.datasetname %]</td> 
    <td align="left" valign="top">[% result.expression %]</td> 
    <td align="left" valign="top">[% result.datatype %]</td> 
    <td align="left" valign="top">[% result.generankpercentile %]</td> 
    </tr> 
    [% END -%] 
[% END -%] 

</tbody> 

<tfoot> 

<tr> 
    <th align="center" valign="center">Dataset</th> 
    <th align="center" valign="center">Tissue</th> 
    <th align="center" valign="center">Expression</th> 
    <th align="center" valign="center">Analysis</th> 
</tr> 

</tfoot> 

</table> 

下面的代码段是在具有表我的第一模板被超链接(view.tt)

<h4>Analyses Summary table</h4> 

<table id="score_table" width="50%"> 

<thead> 

<tr> 
<th align="centre" valign="centre"> Analysis Type</th> 
<th align="centre" valign="centre">Score</th> 
</tr> 

</thead> 

<tbody> 

[% FOREACH score IN gene.whs -%] 

[% plots = [ ['Cancer', score.cancer_vs_normal_over, score.cancer_vs_normal_under], 
['Bladder cancer', score.bladder_cancer_over, score.bladder_cancer_under], 
['Brain and CNS cancer', score.brain_and_cns_cancer_over, score.brain_and_cns_cancer_under], 
['Breast Cancer', score.breast_cancer_over, score.breast_cancer_under], 
['Cervical Cancer', score.cervical_cancer_over, score.cervical_cancer_under], 
['Colorectal cancer', score.colorectal_cancer_over, score.colorectal_cancer_under], 
] 
%] 


[% FOREACH plot IN plots %] 
<tr> 
<td> [% pl0t.0 %]</td> 
<td> [% pl0t.1 %] </td> 
<td> [% pl0t.2 %] </td> 
<td> [% (pl0t.1 + 5)/(plot.2 + 5) | format('%5.2f') %] </td> 
</tr> 
[% END %] 

[% END %] 

</tbody> 

<tfoot> 
<tr> 
<th align="centre" valign="centre"> Analysis Type</th> 
<th align="centre" valign="centre">Score</th> 
</tr> 
</tfoot> 

</table> 

Hi Ret,非常感谢,并且对于迟到的回复感到抱歉。正如你所理解的,我的目标是在汇总表和第二个加载了结果的表之间建立一个“实时”链接。我以某种方式以另一种方式链接模板。我必须在第一个模板中超链接到第二个模板。我的超链接在foreach循环中,看起来像这样。

[% FOREACH plot IN plots %] 
    <tr> 
    <td><a href="[% c.uri_for(c.controller('gene').action_for('sample'))%]/[% plot.0 %]>[% plot.0 %]</a></td> 
    <td> [% pl0t.1 %] </td> 
    <td> [% pl0t.2 %] </td> 
    <td> [% (pl0t.1 + 5)/(plot.2 + 5) | format('%5.2f') %] </td> 
    </tr> 
    [% END %] 

此行正确链接到第二个模板(sample.tt)。第二个模板包含一系列表格。当在第一个表上单击超链接时,应该显示与该链接对应的表。我已成功链接模板。我在控制器(gene.pm)中创建了一个子例程,用于链接模板。我在实现自己的目标方面遇到了问题。第二个模板(sample.tt)中的html部分运行正常,但模板工具箱不起作用。我能够看到url中的变化,但在页面中没有反映出来。

下面是第二个模板子程序:

sub sample :Path('sample'):Args(1) { 
     my($self,$c,$plot)[email protected]_; 
     my @plets = $c->model('GeneDB::genewhs')->search({ 
     Analysistypename => @plet, 
}); 
     $c->stash->{plets}=\@plets; 
     $c->stash->{template}='gene/sample.tt'; 

} 

如果万一的问题是不明确的,请让我知道...我将不得不清除它..

谢谢提前...

回答

0

在当前正在处理的模板中可以简单地使用PROCESSINCLUDE,但这不允许用户交互。我认为你的目标是在总结表和第二张表格之间有一个“实时”链接,并在第一个表格中选择结果后加载结果。你的问题并不完全清楚。

但是,如果我理解正确的话,你需要做的一个(至少)两两件事:

  1. 加载所有的成果转化为一系列表,并添加ID和CSS类每个表以表明其类型。使用jQuery(或类似的)来隐藏所有内容,并根据点击摘要表来显示相关的表格。如果结果数量不是那么好,这意味着你不需要处理AJAX。 (您也可以将所有结果放在一个表中,并使用CSS类来识别类型。)
  2. 编写一个Catalyst Action,它接收所需的任何参数以标识要返回的结果,并将它们作为JSON数组返回。调用函数负责表格的布局。我不会推荐这个,除非你对jQuery,AJAX和Javascript一般都很熟悉,或者所有结果的数量都是令人望而却步的。

说了#2,看起来你已经把所有的结果藏起来了。他们如何链接不太清楚。 (我不禁想到这个数据应该在Catalyst端进行标准化,而不是在模板端用plot数组进行解码。)所以,假设你选择了#1选项,你需要这样的东西:

[%- 
    #add a 'key' field with no spaces suitable for jQuery as the last element 
    plots = [ 
     ['Cancer', score.cancer_vs_normal_over, score.cancer_vs_normal_under, 'cancer'], 
     ['Bladder cancer', score.bladder_cancer_over, score.bladder_cancer_under, 'bladder-cancer' ], 
-%] 

[% FOREACH plot IN plots %] 
<tr> 
<td class="linktoresults" rel="#[%plot.3%]"> [% plot.0 %]</td> 
... 
[% END %] 

[%- FOREACH ... # It's just not clear how plots relate to gene.whs 
    SET rel = ... # how this result links back to the plot array from earlier. 
    PROCESS "secondarytable.tt"; 
    END; 
-%] 

<script src="jquery.js"></script> 
<script> 
    $(document).ready(function({ 
     $(".linktoresults").click(function({ 
      id = $(this).attr('rel'); 
      $(".analysis_table").hide(); // hide all tables 
      $(id).show(); // show the relevant one for this item 
     }); 
    }); 
</script> 

而且你secondarytable.tt模板需要有:

<table class="analysis_table" id="[%rel%]" width="90%"> 

...这样的点击功能可以链接到下级表。

希望这些代码片段能为您带来正确的方向。恐怕,plotsgene.whs之间的关系还不够清楚,因为我不能给你更多。

+0

嗨Ret,非常感谢,很抱歉,迟到的答复。正如你所理解的,我的目标是在汇总表和第二个加载了结果的表之间建立一个“实时”链接。我以某种方式以另一种方式链接模板。我必须在第一个模板中超链接到第二个模板。 – user1462804 2012-07-14 05:17:47

相关问题