如何动态使用UIBinder?

时间:2011-08-03 12:44:35

标签: gwt uibinder

我正在使用gwt 2.3。我正在使用UI绑定器。我想通过使用UIBinder来创建网格。为此,我写了这段代码。

<g:Grid ui:field='mygrid' addStyleNames='{style.panel}'
            cellSpacing='10'>
            <g:row>
                <g:customCell>
                    <g:Label text="11" styleName="{style.label}" /> 
                </g:customCell>
                <g:customCell>
                    <g:Label text="22" styleName="{style.label}" /> 
                </g:customCell>
            </g:row>
            <g:row>
                <g:customCell>
                    <g:Label text="33" styleName="{style.label}" /> 
                </g:customCell>
                <g:customCell>
                    <g:Label text="44" styleName="{style.label}" /> 
                </g:customCell>
            </g:row>
        </g:Grid>

现在我的网格数据是静态的。如果我的数据来自服务器端&amp;取决于我想要使用UIbinder创建网格的数据。怎么可能这个?

另一种情况。有形式。来自控件的数量来自数据库。 那么UIBider如何支持创建这种形式。每次控制的数量可能会有所不同

所以我想知道是否可以使用UIBinder来创建用户界面,具体取决于运行时数据。

任何建议或示例表示赞赏。

2 个答案:

答案 0 :(得分:1)

UiBinder是“交叉编译”到JavaScript和HTML代码。一旦完成,你就无法修改它。现在有办法做一些事情,比如将XML语法发送到客户端,然后创建一个网格。

但是,您可能会在“代码隐藏”中添加新行。

对于你的第二个问题:我不明白你的意思:P

答案 1 :(得分:1)

是的,您可以从Java向UIBinder添加数据。在Eclipse中创建UIBinder时,它还为此XML创建了.java文件。编辑此相应的java文件并添加如下内容:

public class MyGridSample extends Composite {
    // uiBinder interface declaration...
    private static MyGridSampleUiBinderUiBinder uiBinder = GWT.create(MyGridSampleUiBinder.class);

    interface MyGridSampleUiBinder extends UiBinder<Widget, MyGridSample > {
    }

    // annotation to get ui-field into code
    @UiField
    Grid mygrid;

    public MyGridSample () {
        setWidget(uiBinder.createAndBindUi(this));
        // sets cell 0,0 with label
        mygrid.setWidget(0, 0, new Label("cell 0"));
    }
}

GWT是客户端框架,UIBinder预编译为javascript文件 - 它们作为静态文件提供。您应该进行Webservice调用以将数据导入此模板。