Tôi đang cố gắng lấy một cơ sở mã đang hoạt động và làm cho nó hướng đối tượng bằng cách sử dụng JavaScript. Hệ thống của tôi lấy JSON chứa nhóm và các mục trong mối quan hệ một-nhiều và trực quan hóa điều này trên một trang. Các mục có thể được di chuyển vào các nhóm khác nhau và vị trí của chúng trong các nhóm đó cũng cần phải được tính toán. Như vậy, các sự kiện sẽ cần phải được thiết lập mà nhận thức được cả các nhóm và vé xung quanh.Phụ thuộc thông tư giữa Lớp JavaScript và đối tượng jQuery
Tôi đang sử dụng John Resig's thiết lập kế thừa JavaScript đơn giản để thiết lập hai lớp, Item
và Group
. Khi mỗi Item
được khởi tạo, nó đề cập đến nó là phụ huynh Group
. Vấn đề của tôi nảy sinh khi tôi muốn thiết lập sự kiện của tôi, và là cách dễ dàng nhất giải thích bằng các chức năng sau:
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;
},
...
)};
Lưu ý việc sử dụng các .data("_obj")
trong đoạn mã trên. Về cơ bản, khi tôi cần phải làm một cái gì đó như phân loại các mục, sau đó tôi cần phải biết đối tượng (mô hình) tương ứng với tất cả các mục của DOM (xem/điều khiển) trong nhóm. Bây giờ, tôi có thể thiết lập lớp học Group
của mình để khi tạo mỗi Item
Tôi thêm một tham chiếu đến nó từ trong số Group
của mình (ví dụ: Group.items = [i1, i2...]
), và sau đó thay vì lặp qua các phần tử DOM, tôi có thể lặp qua các trường hợp Item
. Tuy nhiên tôi nghĩ rằng tôi muốn chạy vào các vấn đề tương tự xuống dòng, chẳng hạn như khi tôi muốn di chuyển một Item
vào một khác nhau Group
(như Group
sẽ không biết về Item
).
Câu chuyện dài ngắn: thực sự là nguy hiểm/ngây thơ/vô nghĩa khi có lớp học khi tạo thành phần tử DOM, sau đó lần lượt trỏ trở lại lớp học? Điều này cảm thấy như phụ thuộc vòng tròn, và một số cơn ác mộng đệ quy, nhưng có lẽ một tham chiếu đến một đối tượng không phải là một điều khủng khiếp như vậy. Nếu tôi đang làm bất cứ điều gì khác thực sự ngu ngốc, và có một cách đơn giản hơn nhiều, sau đó xin vui lòng chỉ ra rằng là tốt.
Bạn đã xem cách Backbone.js thực hiện điều đó chưa? Đối tượng 'view' giữ tham chiếu đến' model' (Item của bạn, Class group) và DOM element 'el'. Có nhiều cách để thực hiện nó và Backbone.js không đề nghị bất kỳ một cách nào ở đây: http://backbonejs.org/#FAQ-tim-toady – vsr