기존의 작업 코드베이스를 JavaScript를 사용하여 객체 지향으로 만들려고합니다. 내 시스템은 그룹 인 및 을 포함하는 JSON을 일대 다 관계로으로 가져 와서이를 페이지에서 시각화합니다. 항목을 다른 그룹으로 이동할 수 있으며 해당 그룹 내의 위치를 계산해야합니다. 따라서 주변의 단체 및 티켓을 모두 알고있는 이벤트를 수립해야합니다.JavaScript 클래스와 jQuery 객체 사이의 순환 종속성
저는 John Resig's 간단한 자바 스크립트 상속 설정을 사용하여 Item
및 Group
의 두 클래스를 설정하고 있습니다. 각각의 Item
이 인스턴스화되면 부모에게 Group
이라는 것을 다시 참조합니다. 내 문제 내가 내 이벤트를 설정하고자 할 때 발생하고, 가장 쉽게 다음과 같은 기능에 의해 설명 :
var Group = Class.extend({
...
// Calculate where to place the new item within the group
calculate_new_position: function(item) {
var pos = -1;
// Loop through all DOM items in groups body
$(".item", this.elBody).each(function(i) {
// Retrieve it's class object
var next = $(this).data("_obj");
// Calculating things using the class reference
var lowerPrio = item.tData.priority < next.tData.priority,
lowerId = item.id < next.id;
if(lowerPrio || lowerId) {
pos = i;
return false;
}
});
return pos;
},
...
)};
참고 위의 코드에서 .data("_obj")
의 사용. 기본적으로 항목 정렬과 같은 작업을 수행해야하는 경우 그룹의 모든 항목의 DOM (보기/컨트롤러)에 해당하는 개체 (모델)를 알아야합니다. 이제 Group
클래스를 만들면 각 Item
을 만들 때 내 Group
(예 : Group.items = [i1, i2...]
) 내에서 참조를 추가 한 다음 DOM 요소를 반복하지 않고 Item
인스턴스를 반복 할 수 있습니다. 그러나 내가 같은(Group
은 Item
에 대해 알지 못해서) Item
을 다른 Group
으로 옮기고 싶을 때와 같이 비슷한 문제가 생길 것이라고 생각합니다.
짧은 이야기 : 본질적으로 위험한/순진/무의미한 클래스가 인스턴스화 될 때 DOM 요소가 만들어지고 다시 클래스를 가리키는 것입니까? 이것은 원형 종속성과 재귀적인 악몽 같은 느낌이지만 객체에 대한 참조는 그리 끔찍한 것이 아닙니다. 만약 내가 다른 것을하고 있다면 은 정말로 어리 석고 훨씬 간단한 방법이있다.
Backbone.js가 어떻게 사용했는지 살펴 보셨습니까? 'view' 객체는'model' (Item, Group 클래스)과 DOM 엘레멘트'el'에 대한 참조를 가지고 있습니다. 그것을하기위한 여러 가지 방법과 백본이 있습니다.js는 여기에 어떤 방법도 추천하지 않습니다 : http://backbonejs.org/#FAQ-tim-toady – vsr