Evan You๊ฐ ๋ง๋ค์์ผ๋ฉฐ, 2014๋
๋ฆด๋ฆฌ์ฆ๋ฅผ ์์์ผ๋ก ๊พธ์คํ ๋ฐ์ ํ๊ณ ์๋ ์๋ฐ์คํฌ๋ฆฝํธ ํ๋ ์์ํฌ์
๋๋ค.
์ปจํธ๋กค๋ฌ ๋์ ๋ทฐ ๋ชจ๋ธ์ ๊ฐ์ง๋ MVVM(Model-View-ViewModel) ํจํด์ ๊ธฐ๋ฐ์ผ๋ก ๋์์ธ๋์์ผ๋ฉฐ,
์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํ UI๋ค์ ๋ฌถ์ด์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
MVVM ํจํด์ ๋ทฐ๋ชจ๋ธ(ViewModel) ๋ ์ด์ด์ ํด๋นํ๋ ํ๋ฉด(View)๋จ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
์นํ์ด์ง๋ ๋๊ณผ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ๋ง๋ค์ด์ง๊ฒ ๋๋๋ฐ ๋์ด View ์ญํ ์ ํ๊ณ , ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ Model ์ญํ ์ ํฉ๋๋ค.
๋ทฐ๋ชจ๋ธ์ด ์๋ ๊ฒฝ์ฐ์๋ ์ง์ ๋ชจ๋ธ๊ณผ ๋ทฐ๋ฅผ ์ฐ๊ฒฐํด์ผ ํฉ๋๋ค.
๊ทธ๋ฌ๋ ๋ทฐ๋ชจ๋ธ์ด ์ค๊ฐ์์ ์ฐ๊ฒฐํด ์ฃผ๋ ๊ฒ์ด MVVM ๋ชจ๋ธ์
๋๋ค.
์ถ์ฒ : https://wikidocs.net/17701
<div id="app"></div>
<script>
var div = document.querySelector('#app');
var viewModel = {};
// ๊ฐ์ฒด์ ๋์์ ์ฌ์ ์
// Object.defineProperty(๋์ ๊ฐ์ฒด, ๊ฐ์ฒด์ ์์ฑ, {์ ์ํ ๋ด์ฉ})
Object.defineProperty(viewModel, 'str', {
// ์์ฑ์ ์ ๊ทผํ์ ๋์ ๋์์ ์ ์
get: function() {
console.log('์ ๊ทผ');
},
// ์์ฑ์ ๊ฐ์ ํ ๋นํ์ ๋์ ๋์์ ์ ์
set: function(newValue) {
console.log('ํ ๋น', newValue);
render(newValue);
}
})
</script>
(function() { //์ฆ์ ์คํ ํจ์
function init() {
// ๊ฐ์ฒด์ ๋์์ ์ฌ์ ์
// Object.defineProperty(๋์ ๊ฐ์ฒด, ๊ฐ์ฒด์ ์์ฑ, {์ ์ํ ๋ด์ฉ})
Object.defineProperty(viewModel, 'str', {
// ์์ฑ์ ์ ๊ทผํ์ ๋์ ๋์์ ์ ์
get: function() {
console.log('์ ๊ทผ');
},
// ์์ฑ์ ๊ฐ์ ํ ๋นํ์ ๋์ ๋์์ ์ ์
set: function(newValue) {
console.log('ํ ๋น', newValue);
render(newValue);
}
});
}
function render(value) {
div.innerHTML = value;
}
init();
})();