5

私は GWT にはかなり慣れていませんが、これまでかなり急速に進歩してきました。

私はセル テーブルを持っていますが、そのほとんどは RPC から返された読み取り専用データです。

ユーザーが操作できるセル テーブルに 2 つの列があります。1 つは TextInputCell で、もう 1 つは ButtonCell です。

ユーザーが ButtonCell をクリックすると、その行の TextInputCell の値を RPC に送信したいと考えています。

私はこれをすべて機能させています。

私が作業できないのは、ボタン(ButtonCell)がクリックされたときに、RPCが戻るまでその行のボタンを無効にしてから、再度有効にしたいということです。また、RPC が返されたときに、その行の入力セルのテキストをクリアしたいと考えています。

クリックされた実際の ButtonCell オブジェクトまたは TextInputCell へのハンドルを取得する方法がわかりません。

どんな助けでも感謝します。

bq

4

2 に答える 2

4

問題は、クリックされたボタンのオブジェクトがないことです。ButtonCell は、ボタンをレンダリングする HTML を作成します。列全体のすべてのボタンは同じボタン セルによって記述されていますが、それらに関連付けられた Java オブジェクトはありません。

ボタンを直接無効にするには、最初にそのハンドルを作成する必要があります。これを行うには、ButtonCell が作成する html で ID をレンダリングし、DOM から ID で要素を取得します。

同様のケースで私が行うことは、状態が変化したときにテーブル全体を再レンダリングすることです。それほど時間はかからず、参照を保存する必要もありません (とにかく Grid の代わりに CellTable を使用している理由です)。ボタンを無効にする必要があることがわかっている場合は、ボタンを無効にするだけです。

これらの提案は両方とも、カスタム レンダリングを実行できるように、Cell オブジェクトをサブクラス化する必要があります。それほど難しいことではありませんが、操作の順序に頭を悩ませると混乱する可能性があります。幸運を!

PS: ボタンを無効にしたい (テキスト フィールドを空にしたくない) 場合は、 onBrowserEventElementがクリックされた へのハンドルを提供すると思います - それを使用して無効にすることができるかもしれません。

于 2012-01-03T17:05:38.340 に答える
4

私はこの問題を経験しましたが、最終的には解決しました。

このコードを確認してください

package com.ex7.client;

import com.google.gwt.cell.client.ButtonCell;
import com.google.gwt.cell.client.ValueUpdater;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.NativeEvent;
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;

public class CWButton extends ButtonCell {
    private int row = -1;
    private String alternativevalue;
    private String exTitle = "";

    private String value;
    private String title = "";

    public CWButton( ) {
        super();

    }

    @Override
    public void render(com.google.gwt.cell.client.Cell.Context context,
            String src, SafeHtmlBuilder sb) {

        if (row == -1) {
            sb.appendHtmlConstant("<button   title='" + title + "'  >" +value+"</button>");
            return;
        }

        if (row != context.getIndex()) {

            sb.appendHtmlConstant("<Button   disabled='disabled'   title='" + title + "'  >"+ value+"</button>");
        } else {
            sb.appendHtmlConstant("<button    title='" + exTitle + "' >"+ alternativevalue+"</button>");
        }

    }

    @Override
    public void onBrowserEvent(com.google.gwt.cell.client.Cell.Context context,
            Element parent, String value, NativeEvent event,
            ValueUpdater<String> valueUpdater) {

        if (row == -1 || row == context.getIndex()) {
            super.onBrowserEvent(context, parent, value, event, valueUpdater);
            return;
        }

    }

    public void setTitle(String title) {

        this.title = title;
    }

    public int getRow() {
        return row;
    }

    public String getExTitle() {
        return exTitle;
    }

    public void setExTitle(String exTitle) {
        this.exTitle = exTitle;
    }

    public void setRow(int row) {
        this.row = row;
    }

    public String getAlternativeValue() {
        return alternativevalue;
    }

    public void setAlternativeValue(String alternativeValue) {
        this.alternativevalue = alternativeValue;
    }

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }

}
于 2012-07-17T15:42:24.043 に答える