0

GWT を使用して Web アプリケーションを作成するプロジェクトを継承しました。Bootstrap3 の GWT ラッパーを使用して要素のスタイリングを行います。これは、ほとんどの場合うまく機能しています。Select現在 GWT を使用している GWTDataGridテーブルにBootstrap3 を追加しようとすると、障害が発生しましたSelectionCell。問題は、 aSelectionCellが「ブートストラップ スタイル」ではないため、残りの Web アプリケーションのスタイルと一致しないことです。

残念ながら、は GWTインターフェースを実装しておらず、 に追加できるクラスを拡張していないため、Selectを GWT に単純に追加することはできません。サブクラス化と実装により、この問題が修正されます。ただし、が でラップされていない DOM にアタッチされた後に JavaScript 関数を実行する必要があるため、 を適切にレンダリングすることはできません。DataGridSelectCellColumnDataGridSelectCellSelectSelectColumnDataGrid

代わりに、 の関数SafeHtmlBuilderによって にレンダリングされます。renderCell

// GWTBootstrap3::Select function to render the Select
public void render() {
    if (isAttached())
        command(getElement(), SelectCommand.RENDER);
}

protected native void command(Element e, String command) /*-{
    $wnd.jQuery(e).selectpicker(command);
}-*/;

SelectはDOMに接続されていないため、関数を手動で呼び出す必要がありますselectpickerSafeHtmlBuilder彼のために、が に追加された後に呼び出す必要がある独自のネイティブ関数を作成しましたDataGridSelectサブクラスが を介してイベントを受け入れ、セルCLICKをクリックした後にネイティブ関数を呼び出すと、適切にレンダリングされます。CellonBrowserEventSelect

私が理解できないのは、RPC呼び出しによって行が追加された後、selectpicker関数をプログラムで呼び出して自動的にレンダリングする時期です。Selectさまざまなハンドラーを登録しようとしましたが、役に立ちませんでした。ハンドラーが呼び出され、関数をラップするネイティブ関数selectpickerも呼び出されますが、HTMLselectがまだテーブルに追加されていないようです。ブラウザの JavaScript コンソールから切り取った上記の JavaScript を呼び出すこともできます。だからそれはうまくいくはずですが、私は電話するのに適切な場所を見つける必要があります:(

DataGrid私が使用しているハンドラー:

  • addLoadingStateChangeHandler
  • addRowCountChangeHandler

DataGridまた、データに追加する呼び出しが行われた後、別の場所でそれを呼び出そうとしました。繰り返しますが、HTMLselectは に追加されていないようですtable。すなわち。への呼び出しの直後に切り取られた JavaScript を呼び出すとmyListDataProviderObject.getList()addAll(my data)

4

1 に答える 1

0

ほとんどの場合、ネイティブ メソッドを呼び出す前にScheduler 呼び出しを追加して、この呼び出しが実行される前にブラウザーが UI (DataGrid など) のレンダリングを完了していることを確認する必要があります。

于 2016-08-05T00:56:33.783 に答える