0

私はGqueryで経験していて、live()メソッドで作業するのが難しいものを見つけました。私に関する限り、「将来の」要素の動作を定義する場合に非常に役立ちます。たとえば、特定のボタンをクリックした後に作成した水平パネルに背景色を変更したいと思います。サンプルコードは以下に添付されています。

RootPanel.get(); //before invoking live method, recommended in gwt forum
GQuery hPanel = mySelectors.getHorizontalPanel();
hPanel.live(Event.ONCLICK, new Function () {
    public boolean f (Event e) {
    int red = 100;
    int green = 100;
    int blue = 100;
    while (red < 250) {
        while (green < 250) {
            while (blue < 250) {
                String bgColor = "backgroundColor: 'rgb(" + red + "," + green + "," + blue + ")'";
                $(e).animate(bgColor,8);
                blue+=10;
            }
            green+=10;
        }
        red+=10;
    }               
    return false;
    }
});

HorizontalPanel horizontalPanel = new HorizontalPanel();
horizontalPanel.setHeight("40px");
horizontalPanel.setWidth("40px");
horizontalPanel.setStyleName("horizontal-panel");

final HorizontalPanel newPanel = new HorizontalPanel();
newPanel.add(horizontalPanel);
RootPanel.get("horizontalPanels").add(newPanel);

何らかの理由で、パネルをクリックしてもイベントは呼び出されません。セレクターは次のように宣言されました。

@Selector(".horizontal-panel")
GQuery getHorizontalPanel();

どんな助けでも、またはこの問題についての光は大いにありがたいです、

前もって感謝します!

4

1 に答える 1

1

ライブがセレクターをサポートしていないからだと思います...

コードのこの部分を置き換えてみてください:

GQuery hPanel = mySelectors.getHorizontalPanel();
hPanel.live(Event.ONCLICK, new Function () {

に :

$(".horizontal-panel").live(Event.ONCLICK, new Function () {

live()はcssセレクターを知る必要があります。@Selectorを使用すると、GQueryがコンパイル時に要素をクエリするための最も最適化された方法に置き換えるため、この情報が失われます。

于 2012-06-07T11:36:06.960 に答える