0

テキスト フィールドにオートコンプリート ポップアップを実装しているので、テキスト フィールドの下に常にポップアップが表示されるようにする必要があります。ZK でこれを行う標準的な方法は次のとおりです。

    popup.open( field, "after_start" );

テキスト ボックスがグリッド コントロールの一部であることを除けば、これで問題ありません。ユーザーが画面の下部近くの行にデータを入力していて、フィールドの下にポップアップを表示する十分なスペースがない場合、ZK はポップアップの位置を調整して完全に表示されるようにし、テキスト ボックス コントロールを覆い隠します。

私のデスクトップは設計上、フィールドの下にポップアップを表示するのに十分なスペースがあります。ポップアップがフィールドの下にとどまるように、クライアントがスクロールされるようにする必要があります。

を使用してみましClients.scrollIntoView( popup );たが、ポップアップが自動的に表示されるため、役に立ちません。

私が知っている別の可能性は、"end_before"位置の値を使用してポップアップをテキスト ボックスの右側に配置することですが、これはオートコンプリート ポップアップの標準 UI 規則と一致しません。

4

1 に答える 1

1

optsポップアップウィジェットのメソッドの引数でopen(クライアント側から)ポップアップ位置を調整できます。詳細については、そのメソッドのリファレンスを参照してください。

残念ながら、Java コードからこの引数値を設定する方法はありませんopen。結果を取得するには、クライアント (つまり、javascript) メソッドのデフォルトの動作をオーバーライドする必要があります。

ウィジェットのメソッドのオーバーライドについては、この記事で説明しています。

あなたの場合、元のメソッドopts.overflowを呼び出す前にプロパティを任意の値に設定する必要があります。open例えば:

<popup xmlns:w="http://www.zkoss.org/2005/zk/client">
    <attribute w:name="open">
        function (ref, offset, position, opts) {
            var _opts = opts || {}; // opts can be undefined! 
            _opts.overflow = true;
            this.$open(ref, offset, position, _opts);
        }
    </attribute>
</popup>

このポップアップを開いた後、popup.open必要Clients.scrollIntoViewに応じて表示できるようにします。

于 2013-03-07T12:54:17.183 に答える