DOMを見てください。スケジューラーのコンテンツ は、ヘッダーから区切られた<table>
の範囲内でレンダリングされます。
技術的に、あなたは、ウィジェットのテーブルの周りに<div>
をラップし、それが所望の高さとscroll
またはauto
からoverflow-y
にCSS-プロパティheight
またはmax-height
だ設定することができます。この方法で、あなたが望むものを達成することができます。
以下のコードスニペットをご覧ください。それはトリックを行う必要があります。
$("#scheduler > table.k-scheduler-layout").wrap("<div style='max-height: 200px; overflow-y: auto;'></div>")
しかし、私はHTML構造を操作する場合はテストしていないウィジェットの通常の使用時に剣道の側からの予期しない副作用を紹介しますこの方法。
更新: 別のビューにナビゲートするときのレンダリングプロセス中、剣道は古いものをレンダリングするために古いものを削除します - 明らかに - 以前と同じルーチンを使用します。残っているのは、上記で作成した空の<div>
と新しいtable
です。両方ともウィジェットの親ノード$("#scheduler")
のすぐ下にあります。つまり、上のコードは、グリッドのデータがバインドされた後に実行されなければなりません。この目的のためにdataBoundイベントを使用することができます。ドキュメント:https://docs.telerik.com/kendo-ui/api/javascript/ui/scheduler#events-dataBound)
更新されたコード・スニペット、イベント、メソッドがどのように見える可能性がどのように示す:
function scheduler_DataBound() {
$("#scheduler > .scheduler-content-wrapper").remove();//Reset the DOM after changing page
$("#scheduler > table.k-scheduler-layout").wrap("<div class='scheduler-content-wrapper' style='max-height: 200px; overflow-y: auto;'></div>");
$("#scheduler .k-scheduler-content").css("overflow-x", "hidden");//Fix horizontal scrollbar
}
UPDATE 2:私は、グリッドはデータバインドされ、イベントが取得する場合にクラッシュすることが判明ページのサイズを変更したり、エディタポップアップを開いた後に起動されます。私の最初の考えは、dataBound
がグリッドのサイズを変更するのに適切な場所ではないということでした。コードをnavigate
-eventで実行しようとしたところ、適切な場所にすべきだと私は思っていましたが、そこから作業する唯一の方法はコードをsetTimeout(function(){ /* code... */ })
で囲むことです。これが動作している間、遅延レンダリングはブラウザでひどく見えます。最後に、dataBound
の後にグリッドのサイズを変更する必要があるときはいつも、フラグを設定するためにコードを変更しました。もちろん、ちょうどウィジェットのサイズを変更するために、たくさんのコードの周りに広がるのはちょっとした気分になります。しかし、私の現在の理解のポイントからは、ユーザーエクスペリエンスが重要な場合にはこれが唯一許容される解決策です。
<script>
var resizeScheduler = true;
function scheduler_DataBound() {
if (!resizeScheduler) {//Prevent grid crash, when event fired on page resize
return;
}
resizeScheduler = false;
$("#scheduler > .scheduler-content-wrapper").remove();
$("#scheduler > table.k-scheduler-layout").wrap("<div class='scheduler-content-wrapper' style='max-height: 200px; overflow-y: auto;'></div>");
$("#scheduler .k-scheduler-content").css("overflow-x", "hidden");//Fix horizontal scrollbar
}
function scheduler_Navigate() {
resizeScheduler = true;
}
</script>
これが役立つことを願っています。
興味深い...私はテーブルの周りのdivをラップすることが動作するかどうかを確認する必要があります。スケジューラーの高さを指定しないと、スケジューラーの内容は増えます。したがって、divが最大高さでラップして、それがうまくいけば、はるかに簡単になります。 –
それはうんざりしています。一日と勤務時間を切り替えることで物事を変えるまで(デモを使用して、道場のものを変更するだけで)機能します。勤務時間に変更してからサイズを変更する必要があるように見えますが、サイズ変更や表示のリフレッシュは、Dojoのように動作しません。デモであるかどうかは分かりません。 –
@TylerDahle私は自分のマシンでそれをテストしました。正しく観察したところ、別のページに切り替えた後にレイアウトがクラッシュします。私の答えを更新します – Alan