模板应用默认参数

时间:2013-10-07 11:12:10

标签: java templates stringtemplate-4

我会尝试让我的问题看起来很简单,希望解决方案能够实现。

让我们说明我们有两个模板如下:

html(data,value,charts) ::= <<
    <!DOCTYPE HTML>
    <html>
    [...]
        var $data$ = $value$;
        $charts$
    [...]
    </html>
>>

chart(chartname,data,categoryname,graphs) ::= <<
    var $chartname$;
    $chartname$.dataProvider = $data$;
    [...]
>>

在Java中,我必须做类似的事情:

ST myPage = group.getInstanceOf("html");
ST chart1 = group.getInstanceOf("chart");
ST chart2 = group.getInstanceOf("chart");
myPage.add("data", xxx );
chart1.add("data", xxx );
chart2.add("data", xxx );

但是,“数据”对于所有人来说是相同的(代码重复!),所以我想在“html”模板中对数据应用“图表”模板,例如:

html(data,value,charts) ::= <<
    [...]
        var $data$ = $value$;
        $charts(data)$
    [...]
>>

这是不可能的,因为“图表”模板作为更多参数而不仅仅是“数据”。

我的问题是: 如何调用“图表”模板,使用“html”。“data”表示“chart”。“data”但是通过保持通常的方式在运行时使用.add(String,Object)设置参数..?

感谢您的时间!

1 个答案:

答案 0 :(得分:0)

一种选择是从data模板中删除chart参数。这样做会导致datachart的引用在调用上下文中查找属性(例如html模板)。但是,这也意味着以下内容:

  1. 您无法为data模板的实例显式设置chart参数(Java代码中的最后两行会引发异常)。
  2. chart模板无法独立呈现。如果您需要在没有chart模板的情况下呈现html模板,则需要定义一个新模板,例如standaloneChart(data, chart),以便您可以在其中呈现chart模板定义data
  3. 的上下文