Gquery - live方法,如何正确使用它

时间:2012-06-06 14:40:41

标签: java gwt jquery gquery

我正在使用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();

任何帮助,或者对这个问题的关注都会非常感激,

提前致谢!

1 个答案:

答案 0 :(得分:1)

我认为这是因为live不支持选择器...

您可以尝试替换这部分代码:

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

by:

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

live()需要知道css选择器。如果您使用@Selector,它将丢失此信息,因为GQuery在编译时通过最优化的方式来查询元素来替换它