2018년 8월 4일
오늘 한 일:
- 배민찬 step3 PR
- 스타일링
- 리팩토링
내일 할 일:
- 데이터베이스 mySQL JOIN실습
배민찬
TAB UI 리팩토링
1. AJAX로 받아온 데이터 보관
이미 받아온 데이터는 어딘가에 보관해두고 더 이상 ajax를 통해 받아오지 않기로 함.
보관할 장소 후보
- model
- html(선택): model은 자주 수정되는 데이터를 보관하는 곳이므로 html에 넣어두기로 결정
flow
- categoryId를 통해 엘리먼트를 확인한다
- 엘리먼트가 없을 경우 -> 2.
- 엘리먼트가 있을 경우 -> 5.
- ajax로부터 데이터를 받아온다
id
>baseURI/id
- 데이터:
[item ,item, item]
- templating을 한다
- class에 display 속성이 들어가 있어야 함
best_dishes_view
엘리먼트 하위에 추가- BestDishesView의 하위 엘리먼트를 전부
display: none
- 해당하는 엘리먼트만 display
설계
class BestDishesNav {
bindSelectBestDishCategory(handler) {}
}
class Controller {
selectBestDishCategory(categoryId) {
if(this.oBestDishView.hasBestDish(categoryId)) this.oBestDishView.display...
else {
const x = new XMLHttpRequest();
x.addEventListener('load', () => {
this.oBestDishView.render(JSON.parse(x.reponse));
})
x.open('GET', this.baseURI + categoryID);
x.send();
}
}
}
class BestDishView {
render(bestDishData) {}
hasBestDish(categoryId) {}
displayBestDish(categoryId) {}
}
class Template {
bestDishesView() {}
}
const bestDishView = new BestDishView({
template: new Template.bestDishesView
})
- Template의 역할과 크기가 점점 커지고 있다.
2. styling
template를 너무 쪼개놨더니 html을 수정하기가 쉽지 않았다.
inline 엘리먼트도 margin과 padding을 줄 수 있다.
Q. Template의 가독성
templating을 위해 Template클래스를 사용했다. Template의 메소드는 엘리먼트 별로 templating하도록 잘게 쪼개놨는데 가독성이 떨어졌다.
html가독성이 떨어져서 수정하기도 쉽지 않았다.
// 쪼개기 전
class Template {
view(data) {
return `
<div class='image'>
<ul class='list'>
<li>first</li>
</ul>
</div>`
}
}
// 쪼갠 후
class Template {
view(data) {
return '<div class="image">' + this._image(data) + '</div>';
}
_image(data) {
return '<ul class="list">' + _item(data) + '</ul>';
}
_item(data) {
return `<li>${data}</li>`
}
}