2

次のJavaおよびHTMLコードがあります。

this.leakageModel = new PropertyListView<Leakage> ( "leakage", new ArrayList<Leakage> ()) {
        private static final long serialVersionUID = 1L;

        @Override
        protected void populateItem (final ListItem<Leakage> item) {

            Link<String> brandLink = new Link<String> ("brandLink") {
                private static final long serialVersionUID = -480222850475280108L;

                @Override
                public void onClick () {
                    //change another model in the page to update 
                    //another table when the link is clicked
                }

            };

            brandLink.add (new Label ("brand"));
            item.add (brandLink);

        } };

    add (this.leakageModel);

html ファイル:

                        <tr wicket:id="leakage" class="testClass">
                            <td class="testClass">
                                <a wicket:id="brandLink" href="#">
                                    <span wicket:id="brand"></span>
                                </a>
                            </td>   

                        </tr>

私がやりたいことは、onClick() メソッド内から JavaScript 関数を呼び出せるようにすることです。

現在 onClick メソッド内で行っているモデルの更新はうまく機能し、ページ上の別のテーブルを更新します。

ただし、javascript 関数を呼び出したり、css スタイルを変更しようとしたことはすべて失敗しました。

例えば:

css クラスの追加:

add (new AttributeAppender("クラス", new Model("別のクラス"), " "));

代わりに AjaxLink 型を使用し、他の多くのことを試してみましたが、役に立ちませんでした。

関連するメモとして、最初の意図は、クリックした行を除くテーブル内のすべての行を非表示にすることです。たぶん、Javaコードからこれを行うことができ、Javascriptはまったく必要ありませんが、上記のようにcssを更新しても機能しません。

私が間違っていることについて何か提案はありますか?

4

1 に答える 1

3

関連するメモとして、最初の意図は、クリックした行を除くテーブル内のすべての行を非表示にすることです。

あなたの質問に答える代わりに、私はあなたの問題に対する解決策を提供しようとします:)。

JavaScript を使用してテーブル行を非表示にすることは完全に理にかなっています。最初のテーブル行を除くすべてを jQuery で非表示にする で説明されているように、Jquery でそれを行うことをお勧めします。

$("#myTbl tr:not(nth-child(3))").hide();

ここで、ユーザーが Wicket リンクをクリックするたびに、上記の JavaScript スニペットを実行する必要があります。このために、たとえば次のような独自のリンク クラスを作成できます。

public class JavascriptLink extends Label{

  public JavascriptLink(String id, String label) {
    super(id, label);
    add(new AttributeAppender("onclick", "...your javascript here..."));
  }
}

jquery と JavascriptLink を組み合わせて要件を満たすようにします。この方向に進むとうまくいくはずです。

于 2013-07-07T21:04:18.093 に答える