0

解決策が得られることを期待して、問題を単純に見えるようにします。

次のように 2 つのテンプレートがあるとしましょう。

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)$
    [...]
>>

「チャート」テンプレートは単なる「データ」以外のパラメーターとして使用されるため、これは不可能です。

私の質問は: "chart"."data" に "html"."data" を使用して "chart" テンプレートを呼び出す方法ですが、.add(String, Object) を使用して実行時にパラメーターを設定する通常の方法を維持することにより.. ?

お時間をいただきありがとうございます!

4

1 に答える 1

0

1 つのオプションは、テンプレートdataからパラメーターを削除することです。chartそうすることで、内部への参照がdata呼び出しchartコンテキスト (たとえば、htmlテンプレート) で属性を検索できるようになります。ただし、これは次のことも意味します。

  1. dataテンプレートのインスタンスの引数を明示的に設定できませんでしたchart(Java コードの最後の 2 行で例外がスローされます)。
  2. chartテンプレートを個別にレンダリングできませんでした。chartテンプレートなしでテンプレートをレンダリングする必要がある場合は、 を定義するコンテキストでテンプレートをレンダリングできるhtmlように、新しいテンプレートを定義する必要があります。standaloneChart(data, chart)chartdata
于 2013-10-16T14:30:19.840 に答える