JavaScript 및 OOP에 익숙하지만 UI (HTML) 프로그래밍에 사용되는 JS 클래스를 디자인하는 데 익숙하지 않습니다. 나는 조금 주위를 수색했지만 어떤 보편적 인 패턴을 발견하지 못했다.DOM에서 UI 개체를 나타내는 JavaScript 클래스를 디자인하는 가장 좋은 방법은 무엇입니까?
필자는 Microsoft Windows 패널과 유사한 패널 형 개체를 동적으로 만들고 싶다고 가정 해 보겠습니다. 각 객체에는 컨테이너, 텍스트 레이블을 포함 할 수있는 헤더 영역 및 클릭 이벤트 핸들러가있는 닫기 버튼이 필요합니다. DOM 표현 (HTML) 외에도 오브젝트에는 JavaScript 오브젝트 표현 (변수 및 메소드)이 있습니다. 시도한 한 가지 방법은 다음과 같습니다.
//
// Window class
//
var Window = function(params) {
this.testMethod = function() {
console.log('test'); // just an example
}
this.windowDiv = document.createElement('div');
this.windowDiv.style.width = params.width + 'px';
this.windowDiv.style.height = params.height + 'px';
this.windowDiv.style.position = 'absolute';
this.windowDiv.style.top = '30px';
this.windowDiv.style.left = '30px';
this.windowDiv.style.border = '1px solid #000';
this.headerDiv = document.createElement('div');
this.headerDiv.style.width = '100%';
this.headerDiv.style.height = '30px';
this.headerDiv.style.background = '#bbb';
this.headerDiv.style.borderBottom = '1px solid #000';
this.headerDiv.innerHTML = params.title;
this.buttonDiv = document.createElement('div');
this.buttonDiv.style.width = '30px';
this.buttonDiv.style.height = '18px';
this.buttonDiv.style.position = 'absolute';
this.buttonDiv.style.top = '0px';
this.buttonDiv.style.right = '5px';
this.buttonDiv.style.textAlign = 'center';
this.buttonDiv.style.background = 'red';
this.buttonDiv.style.border = '0px 1px 1px 1px solid #000';
this.buttonDiv.innerHTML = 'x';
this.buttonDiv.addEventListener('click', function(e) {
document.body.removeChild(e.target.parentNode.parentNode);
}, false);
this.headerDiv.appendChild(this.buttonDiv);
this.windowDiv.appendChild(this.headerDiv);
document.body.appendChild(this.windowDiv);
}
// Initialize
var myWindow = new Window({
width: 400,
height: 200,
title: 'My Window'
});
myWindow.testMethod();
"제대로 된 느낌이 들지 않습니다." 또 다른 방법은 render() 메소드를 사용하여 HTML 생성 코드를 분리하는 것입니다. JS 객체가 내부에 여러 개의 중첩 된 HTML 객체를 포함하는 것은 어색한 것처럼 보입니다. innerHTML을 통해 중첩 태그를 전달해야합니까?
그래서 나는 궁금하다. 여기서 가장 좋은 접근 방법은 무엇인가? DOM 코드 (HTML 개체 및 스타일)와 전통적인 변수 및 메서드가있는 클래스를 디자인하는 가장 좋은 방법은 무엇입니까? 이 HTML 객체에 프로토 타입을 사용하는 방법이 있습니까? 이 예제에서 인스턴스화 된 Window 객체를 포함하는 WindowManager 클래스가 있으며이를 관리하고 새로운 객체를 생성하는 방법을 상상해보십시오. 또한 HTML 표현도 가능합니다.
일부는 정적 CSS로 처리하고 ID/클래스를 적용하여 일부 코드를 정리할 수 있지만 위치 지정 및 크기를 프로그래밍 방식으로 수행해야한다고 가정 해 봅시다 (크기 조정, 드래그 드롭 등을 처리하기 위해)).
ExtJS, jQuery 등에서 제공 할 수있는 프레임 워크 수준의 솔루션에는 관심이 없습니다. 자국산 코드에 대한 모범 사례가 무엇인지 알고 싶습니다. 사실, 나는 프레임 워크의 엔지니어가 자신의 UI 클래스를 어떻게 설계하는지 알고 싶어한다.
jQuery와 jQueryUI는 오픈 소스입니다. 항상 볼 수는 있습니다.) https://github.com/bmsterling/jquery-ui – AlienWebguy
John Resig (jQuery)는 내가 본 것 중 가장 포괄적 인 디자인 토론을 제공합니다. 당신은 거기에서 시작해야합니다. – dkretz