์๋ . ์น ์์ฉ ํ๋ก๊ทธ๋จ์ Ace Editor๋ฅผ ์ฌ์ฉํ ๊ณํ์ด์ง๋ง ์์ฉ ํ๋ก๊ทธ๋จ(Flask)์ ์ง์ํ๋ ๋ฐฑ์๋ ์์คํ ์ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ๋ ๋ ๊ฐ์ ๊ณ ์ ํ ํธ์ง๊ธฐ๊ฐ ํ์ํฉ๋๋ค.
Ace์์ ๋ ๊ฐ์ ํธ์ง๊ธฐ๋ฅผ ๋ง๋๋ ๊ฒ์ ๋งค์ฐ ๊ฐ๋จํ์ง๋ง ๋ฌธ์ ๋ ํ ์คํธ ์์ญ ์ด๋ฆ์ ๋ณ๊ฒฝํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค. ์ด๋ฆ์ด ๋์ผํ๊ธฐ ๋๋ฌธ์ ๋ด๊ฐ ๋ณผ ์ ์๋ ํ ์ด๋ฌํ ๊ฒ๋ค์ Flask์ ์์์ผ๋ก ๊ฒ์ํ ์ ์์ผ๋ฏ๋ก ์ถฉ๋์ด ๋ฐ์ํฉ๋๋ค.
ํ ์คํธ ์์ญ์ ์ด๋ฆ์ ๋ณ๊ฒฝํ์ฌ ๋ฌธ์ ์์ด ๋ ๊ฐ์ ๊ฐ๋ณ "์ํฐํฐ"๋ก Flask์ ๊ฒ์ํ ์ ์๋ ๋ฐฉ๋ฒ์ ๋ํ ์์ด๋์ด๊ฐ ์์ต๋๊น? ์ ๋ ฅ์ JSON ๊ฐ์ฒด์ ๋๋ค.
์๋
ํ์ธ์, textarea names
์(๋) ๋ฌด์จ ๋ป์ธ๊ฐ์? ace๋ ์์์์ ์ฌ์ฉํ ์ ์๋ ํ
์คํธ ์์ญ์ ๋ง๋ค์ง ์์ต๋๋ค.
@nightwing ๊ทธ๋ฌ๋ฉด HTML ์์์ ํตํด POST๋ก ์ ์ถ๋ Ace Editor(์ฌ๋์ด ํธ์งํ ์ ์๊ณ ํธ์งํ ์์ )์์ ์ฝํ ์ธ ๋ฅผ ์ป์ผ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํฉ๋๊น? "ํ ์คํธ ์์ญ ์ด๋ฆ"์ ์๋ฏธํ ๋ ํ ์คํธ ์์ญ์์ ์ฌ์ฉํ ์ ์๋ html ์์ฑ "์ด๋ฆ"์ ์ฐธ์กฐํฉ๋๋ค. ์ด๋ฅผ ํตํด ๋ฐฑ์๋ ์คํฌ๋ฆฝํธ์ ํ ์คํธ ์์ญ ๋ด๋ถ์์ ์ ๋ ฅ์ ๋ฐ๊ณ ์ฟผ๋ฆฌ ๋ฑ์ผ๋ก ๋ฐฑ์๋ ๋ณ๊ฒฝ์ ์ํํ ์ ์์ต๋๋ค. ๐ค
๋ค์๊ณผ ๊ฐ์ด ์ ์ถํ ๋ ์๋ณธ ํ ์คํธ ์์ญ์ ์ ์งํ๊ณ ๊ฐ์ ์ ๋ฐ์ดํธํด์ผ ํฉ๋๋ค.
<form method="get" action="#">
<div>
<textarea name=t1></textarea>
</div>
<div>
<textarea name=t2></textarea>
</div>
<div>
<input type=submit>
</div>
</form>
<div id=log></div>
<script src="http://ajaxorg.github.io/ace-builds/src/ace.js"></script>
<script>
function createEditor(name) {
// find the textarea
var textarea = document.querySelector("form textarea[name=" + name + "]");
// create ace editor
var editor = ace.edit()
editor.container.style.height = "100px"
editor.session.setValue(textarea.value)
// replace textarea with ace
textarea.parentNode.insertBefore(editor.container, textarea)
textarea.style.display = "none"
// find the parent form and add submit event listener
var form = textarea
while (form && form.localName != "form") form = form.parentNode
form.addEventListener("submit", function() {
// update value of textarea to match value in ace
textarea.value = editor.getValue()
}, true)
}
createEditor("t1")
createEditor("t2")
</script>
์ค, ๊ณ ๋ง์์ ๋์ดํธ์! ๋์ค์ ์๋ํด๋ณด๊ณ ์ด๋ป๊ฒ ๋๋์ง ์๋ ค๋๋ฆด๊ฒ์ :)
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋ค์๊ณผ ๊ฐ์ด ์ ์ถํ ๋ ์๋ณธ ํ ์คํธ ์์ญ์ ์ ์งํ๊ณ ๊ฐ์ ์ ๋ฐ์ดํธํด์ผ ํฉ๋๋ค.