Próbuję pobrać istniejącą działającą podstawę kodu i uczynić ją obiektową przy użyciu JavaScript. Mój system przyjmuje JSON zawierający grup i pozycji w relacji jeden do wielu i wizualizuje to na stronie. Elementy można przenosić do różnych grup, a ich obliczenia w obrębie tych grup również należy obliczyć. W związku z tym konieczne będzie ustalenie wydarzeń, które będą świadome zarówno grup, jak i biletów wokół nich.Okrężna zależność między klasą JavaScript a obiektem jQuery
Używam prostej konfiguracji dziedziczenia JavaScript w celu ustalenia dwóch klas: Item
i Group
. Po utworzeniu instancji Item
odwołuje się ona do jej rodzica Group
. Mój problem powstaje kiedy chcą założyć swoje wydarzenia, a najłatwiej jest wyjaśnić następującą funkcję:
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;
},
...
)};
Uwaga użycie .data("_obj")
w powyższym fragmencie. Zasadniczo, gdy potrzebuję zrobić coś takiego jak sortowanie przedmiotów, muszę znać obiekt (model) odpowiadający DOM DOM każdego elementu (widok/kontroler) w grupie. Teraz mógłbym ustanowić moją klasę Group
tak, że po utworzeniu każdego dodaję odniesienie do tego z mojego Group
(np. Tak Group.items = [i1, i2...]
), a następnie zamiast powtarzać nad elementami DOM, mógłbym iterować nad instancjami Item
. Jednak myślę, że borykałbym się z podobnymi problemami w dół, na przykład kiedy chcę przenieść Item
do innego Group
(ponieważ Group
nie wiedziałoby o Item
).
Krótko mówiąc: jest to wewnętrznie niebezpieczne/naiwny/bezcelowe mieć klasę, która po instancję tworzy element DOM, które potem z kolei punkty z powrotem do klasy? To wydaje się być zależnością cykliczną i pewnym rekurencyjnym koszmarem, ale być może odniesienie do obiektu nie jest tak straszne. Jeśli robię cokolwiek innego, to jest to głupie i jest o wiele prostszy sposób, więc proszę o to również.
Czy obejrzałeś już działanie Backbone.js? Obiekt 'view' zawiera odniesienie do' modelu' (twój przedmiot, klasa grupy) i elementu DOM 'el'. Istnieje wiele sposobów na to i Kręgosłup.js nie poleca w żaden sposób tutaj: http://backbonejs.org/#FAQ-tim-toady – vsr