(更新:現時点ではこれに取り組んでいませんが、私の答えは古くなっている可能性があります。他の人が提供したものを試して組み込むために、minLines および maxLines プロパティの言及をエコーします。
editor.setOptions({
maxLines: Infinity
});
どうやら無限大は「非常に大きなドキュメントでも仮想ビューポートが無効になるため、あまり良い考えではありません」。したがって、制限を選択する方が良い場合があります。
歴史のために、古い答えは次のとおりです。
あなたが引用した投稿は、文字の高さがわかっている固定幅フォントであり、ドキュメントの行数がわかっているという前提で動作しているだけです。これを掛け合わせると、コンテンツの高さのピクセル数が得られます。文字が押されるかカット/ペーストが発生するたびに (行が追加または削除される可能性があります)、JavaScript を使用して、この具体的な新しいサイズを CSS スタイルで DOM 内の項目に適用することをお勧めします。
(彼らはスクロールバーの「幅」を高さの計算に投入します。正直なところ、その背後に理論的根拠があるかどうかはわかりません。他の誰かにその部分を理解させます。)
とにかく...ソフト ラップをオンにしている場合、レンダリングされたスクリーンの行数は、ドキュメント内の「実際の」行数よりも多くなる場合があります。editor.getSession().getScreenLength()
そのため、よりも使用する方が良いですeditor.getSession().getDocument().getLength()
。
エディター (位置: 絶対) をセクション (位置: 相対) 内に配置しましたが、それはそのセクションに存在する唯一の項目です。このコードは今のところ機能しているようです。詳細がわかり次第更新します...!
$(document).ready(function(){
var heightUpdateFunction = function() {
// http://stackoverflow.com/questions/11584061/
var newHeight =
editor.getSession().getScreenLength()
* editor.renderer.lineHeight
+ editor.renderer.scrollBar.getWidth();
$('#editor').height(newHeight.toString() + "px");
$('#editor-section').height(newHeight.toString() + "px");
// This call is required for the editor to fix all of
// its inner structure for adapting to a change in size
editor.resize();
};
// Set initial size to match initial content
heightUpdateFunction();
// Whenever a change happens inside the ACE editor, update
// the size again
editor.getSession().on('change', heightUpdateFunction);
}