0

タペストリー プロジェクトに問題があります。

問題のページで定義されている場合、1つのページをロードするたびにonActivateメソッドがトリガーされます。しかし、レイアウト テンプレートでそのイベントをキャッチする方法がわかりません。

たとえば、layout.java で変数を定義すると、次のようになります。

@Property
String a = "foo";

そして、テンプレート (layout.tml) でその変数値を選択します。

<p>${a}</p>

OK、そのレイアウトを使用するすべてのページの HTML に「foo」を出力しますが、ページがリロードされるたびにその値を変更したい場合、たとえば、layout.java で onActivate を定義します。

void onActivate(){
    a="bar";
}

このメソッドは、layout.java ではトリガーされず、子ページが定義されている場合にのみトリガーされます。(子ページには、ネイサン Q が言うようにレイアウトを含めます) 変数値を更新するにはどうすればよいですか?

何か案は?

4

2 に答える 2

2

この場合、レイアウトはコンポーネントだと思います。アクティベーション コンテキストを持つのはページのみです。そのため、 onActivate() は起動されません。

あなたの正確なユースケースはわかりませんが、


ページ固有の変数の場合は、パラメーターを Layout コンポーネントに渡すだけです。

Layout.java

@Parameter
@Property
private String a;

SomePage.tml

<html t:a="someString" t:type="Layout" ... />

SomePage.java

@Property
private String someString;

...

void onActivate() {
   someString = "something specific for this page";
}

また

この変数をレンダリングごとに設定する必要があり、ページ固有の値ではない場合は、Layout コンポーネントの SetupRender イベントを使用できます。

void setupRender() {
   a = ...;
}
于 2012-12-21T12:39:18.210 に答える
0

わかりました、プロパティの値を更新する方法を見つけました。そしてそれは非常に簡単でした:

onActivate メソッドでプロパティを宣言してその値を更新する代わりに、layout.java でパブリック メソッドを宣言して、その値を取得し、そこで更新の変更を行います。

private String a = "foo";

public String getA(){

    a = "bar";
    return a;
}

このようにして、ページが読み込まれるたびに a 変数に変更を加えることができます。

于 2013-01-07T10:15:05.903 に答える