2012-05-13 15 views
10

Tôi có một thể hiện CodeMirror được nhúng trong một ứng dụng web tôi đang xây dựng. Nó hoạt động tốt - ngoại trừ nội dung ban đầu sẽ không hiển thị cho đến khi người dùng nhập một ký tự mới. Vì vậy, nó là tất cả ở đó nhưng ẩn cho đến khi người dùng buộc một sự thay đổi. Thật tệ. Có cách nào tôi có thể buộc một repaint hoặc làm mới của trình duyệt của mô phỏng một ký tự nhập - khoảng trắng sẽ làm.CodeMirror có nội dung nhưng sẽ không hiển thị cho đến khi bấm phím

Đây là mã ...

<textarea id='code-mirror' ><?php echo $contents; ?></textarea> 
<script> 
    jQuery(document).ready(function(){ 
     var textarea = document.getElementById('code-mirror'); 
     var myCodeMirror = CodeMirror.fromTextArea(textarea,  
      { 
      onUpdate:codemirrorcallback, 
      }); 
     // myCodeMirror.refresh(); ? is this an option? 
    }); 
</script> 

này sản xuất một trình soạn thảo làm việc mà tiết kiệm nội dung và hiển thị nội dung được lưu bên trong vùng văn bản nhưng chỉ hiển thị nó sau khi người dùng bắt đầu chỉnh sửa nó. Trước đó nó chỉ là trống.

Bất kỳ trợ giúp nào, thậm chí chỉ các liên kết sẽ được đánh giá cao. Cảm ơn các bạn!

CẬP NHẬT

Calling .refresh trên myCodeMirror được in một lỗi trong giao diện điều khiển Chrome Uncaught TypeError: Cannot call method 'focus' of undefined

Trả lời

9

Bạn thực sự cần gọi số refresh() trên phiên bản CodeMirror của bạn nếu điều này xảy ra. Nhưng do các chú khỉ không gian, bạn sẽ cần phải kết thúc cuộc gọi làm mới trong thời gian chờ:

var editor = CodeMirror.fromTextArea(yourSourceDOM, { lineNumbers:true }) 
setTimeout(editor.refresh, 0) 

Nó không đẹp, nhưng điều đó đã giải quyết được cho tôi.

+0

Tôi có cùng một vấn đề và điều này dường như khắc phục. Bạn có một ý tưởng về lý do tại sao điều này hoạt động? – Sarumanatee

+0

Các chú khỉ không gian không cho phép tôi sử dụng setTimeout. Loại bỏ nó làm việc cho tôi. – Tk421

+1

Bất cứ lúc nào bạn phải sử dụng một 'setTimeout' hoặc tương tự như" làm cho nó hoạt động ", nó là _usually_ (không biết chắc chắn trong trường hợp này) do một người nào đó phát hành Zalgo (trộn sync vs async APIs). Thông tin thêm về điều này tại đây: http://blog.izs.me/post/59142742143/designing-apis-for-asynchrony – papercowboy

3

Sử dụng gương mã 5.14.2, nếu bạn làm mới một cách rõ ràng, bạn phải cẩn thận để gọi nó đúng cách (xem this question) nhưng dễ dàng xử lý nhất với mã được cung cấp autorefresh add on.