4

「liveSplitters」が有効になっている BorderContainer 内に dgrid があります (Dojo 1.8 を使用)。dgrid はうまく表示されますが、左側の列と「先頭」の列 (dgrid が含まれている) の間でスプリッターを移動すると、dgrid のサイズが適切に変更されません。ただし、ウィンドウのサイズを少し変更すると、dgrid は適切なサイズに戻ります (つまり、BorderContainer の「先頭」ペインを 100% 埋めます)。

CSS で dgrid を 100% 幅に設定しました。スプリッターの移動後にサイズを更新するように dgrid に指示する必要がある方法はありますか?

4

2 に答える 2

7

dgrid私が別の関連する質問に答えて書いたこの例を見てください:http: //jsfiddle.net/phusick/VjJBT/

探しているCSSルールは次のとおりです。

#grid {
    position: absolute;
    top: 0;
    bottom: 0;
    left: 0;
    right: 0;
    height: auto;
}

編集:バージョンの問題である可能性があると思ったので、最新バージョン0.3.3dgridに更新し、問題のテストを作成しました:http: //jsfiddle.net/phusick/5mHTS/dgrid

まあ、それはバージョンの問題ではなく、サイズ変更時に0.3.1と0.3.3の両方が正常に機能しますBorderContainerが、ChromeとFirefoxでのみ機能します。IE9とOpera12.10で問題を再現しました。

ここに画像の説明を入力してください

グリッドは、適切にサイズ変更するために呼び出す必要がgrid.resize()あります。これは、IE9 / Operaではサイズ変更時に発生しませんBorderContainerが、ウィンドウのサイズ変更時に常に発生します。

DijitRegistryBorderContainerやなどのレイアウトコンポーネントは、サイズ変更時にすべてのdijitContentPane子を呼び出すため、この問題が修正されます。resize()

したがって、サブクラスを作成するDijitRegistryか、グリッドの親でdojo/aspectリッスンして、次を呼び出します。resizeContentPanegrid::resize()

aspect.after(contentPane, "resize", function() {
    grid.resize();
});
于 2012-11-18T00:35:22.427 に答える
1

@phusick の回答へのコメントに記載されているように、DijitRegistry mixin を使用すると、Dgrid は適切にサイズ変更されます。他にもサイズ変更の問題がいくつかありましたが、CSS で要素に相対的な幅を設定する必要がありました (例: 100%)。とにかく ContentPanel で必要とされていないサイズを削除すると、すべての要素のサイズが変更されます。CSS は Dojo 1.5 から引き継がれたもので、CSS で設定されたサイズを持つ ContentPanel に対して同じように反応しなかったようです。

于 2012-11-18T04:00:35.953 に答える