設定
いくつかのコンテンツをレンダリングするBackbone.Marionette.ItemViewがあります。コンテンツがレンダリングされるときに、ビューの一部をスクロールバー付きのコンテナーに変換するjQueryプラグインを適用したいと思います。
スクロールバーは完全にjavascriptで実装されており、初期化時にスクロールコンテナの高さとコンテナ内のコンテンツの高さをチェックする必要があります。
コンテンツがコンテナよりも高い場合は、スクロールバーを有効にする必要があります。
問題
これはすべて単純に聞こえますが、私は奇妙な問題に遭遇しました:
onRenderコールバックでスクロールバープラグインを直接初期化すると、.scroll-container要素の高さが0、maxHeightが0であると思われるようです。
ただし、初期化コードを0msのタイムアウト内にラップすると、すべてが正常に機能し、.scroll-container要素のheightプロパティがjQueryによって正しく返され、スクロールバープラグインが正常に機能します。
コード
onRender: function() {
var that = this;
setTimeout(function() {
that.onLayout();
var $scrollContainer = that.$el.find('.scroll-container'),
scrollPane = new ScrollPane($scrollContainer, {
maxHeightProperty: 'maxHeight',
scrollUpButton: false,
scrollDownButton: false
});
}, 0);
},
質問
onRenderコールバックの実行時に、ブラウザが新しく挿入されたhtmlのレンダリングを実際に終了しなかったために、問題が発生したと思います。
この仮定は正しいですか?もしそうなら、0msのタイムアウトを使用する私の解決策は通常の状況で信頼できますか?