bạn có thể truy vấn các cây thừa kế (hay còn gọi là chuỗi nguyên mẫu) ví dụ đối tượng của bạn như thế này:
đối tượng .__ proto __.__ proto __.__ proto__
Bạn có thể xem những gì có sẵn. Bất kỳ thuộc tính tên loại nào sẽ được bạn thêm vào mỗi chế độ xem và/hoặc mô hình theo cách thủ công. Đây là con đường sạch sẽ nhất. Tôi đề nghị điều này. Chỉ cần thêm 'className: "MyCompany.MyProject.MyArea.MyView"' vào mỗi chế độ xem và/hoặc mô hình của bạn.
Nếu bạn không thêm một tài sản className để đối tượng của bạn, có một cách nhẹ hacky để vẫn có được nó (ví dụ cho các mục đích kết xuất debug):
Giả sử bạn làm điều gì đó như: "MyCompany.MyProject. MyArea.MyView = Backbone.View.extend ({"tên khung nhìn/mô hình nằm trong một tên miền toàn cục var name. Từ cá thể đối tượng, chúng ta không thể tiếp cận tên var toàn cục đó. Vì vậy, trong khi không thực sự lý tưởng, tốt nhất chúng ta có thể làm là đi qua không gian tên tìm kiếm var:
function findBackboneClassName(ns, object, prefix, depth) {
prefix = typeof prefix !== 'undefined' ? prefix : "";
depth = typeof depth !== 'undefined' ? depth : 0;
if (depth > 5) return null;
for (i in ns) {
try { ns[i]; } catch (e) { continue; }
if (/top|window|document|parent|frames|self|chrome|form|theForm/.test(i)) continue;
//console.log(">" + prefix + "." + i + " " + typeof(ns[i]));
if (ns[i] == object.constructor) {
//console.log("Found:", prefix + "." + i);
return prefix + "." + i;
}
if (typeof (ns[i]) == "object") {
var r = findBackboneClassName(ns[i], object, prefix + (prefix != "" ? "." : "") + i, depth + 1);
if (r != null) return r;
}
}
return null;
}
findBackboneClassName(window, myBackboneViewInstance);
Lý tưởng nhất là bạn đang sử dụng không gian tên cho các loại khác ngoài "cửa sổ". dễ dàng hơn để đi qua. Bạn chỉ cần thay thế "cửa sổ" bằng cơ sở không gian tên của bạn và chuyển vào tiền tố mong muốn nếu bạn muốn tiền tố được đặt đúng. Bạn cũng có thể xóa một vài dòng như try..catch và if..continue.
findBackboneClassName(MyCompany.MyProject, myBackboneViewInstance, "MyCompany.MyProject");
Bí quyết nhận tên lớp từ objectInstance.constructor không hoạt động vì xương đòn thừa kế. Tất cả các ctors nhìn giống nhau đối với tôi: "function() {return parent.apply (this, arguments);}".
Bạn cần cụ thể hơn. Mô hình có thể có nhiều chế độ xem. Khung nhìn có tham chiếu .el mà AFAIK là đủ, * nếu bạn đang xem xét các khung nhìn *. Nhưng đó có thể không phải là những gì bạn đang yêu cầu. – JayC
Ah, nevermind. Bạn đang nói theo chương trình. – JayC
Tại sao bạn cần tên lớp? Để tạo ra một mô hình mới cùng loại hoặc để truy cập một chức năng cấp lớp hoặc một cái gì đó khác? Câu hỏi thú vị của nó. – websymphony