Tôi có một thiết lập View-lồng nhau có thể nhận được phần nào sâu trong ứng dụng của tôi. Có rất nhiều cách tôi có thể nghĩ đến khi khởi tạo, kết xuất và nối thêm các khung nhìn phụ, nhưng tôi tự hỏi không biết thực tiễn phổ biến là gì.
Đây là một cặp vợ chồng tôi đã nghĩ đến:
initialize : function () {
this.subView1 = new Subview({options});
this.subView2 = new Subview({options});
},
render : function () {
this.$el.html(this.template());
this.subView1.setElement('.some-el').render();
this.subView2.setElement('.some-el').render();
}
Ưu điểm: Bạn không phải lo lắng về việc duy trì đúng thứ tự DOM khi nối thêm. Các khung nhìn được khởi tạo sớm, vì vậy không có nhiều việc phải làm cùng một lúc trong chức năng kết xuất.
Nhược điểm: Bạn buộc phải ủy quyền lạiEvents (), có thể tốn kém? Chức năng kết xuất của khung nhìn cha bị lộn xộn với tất cả kết xuất của khung nhìn phụ cần phải xảy ra? Bạn không có khả năng thiết lập tagName
các yếu tố, vì vậy mẫu cần duy trì tên thẻ chính xác.
Cách khác:
initialize : function () {
},
render : function () {
this.$el.empty();
this.subView1 = new Subview({options});
this.subView2 = new Subview({options});
this.$el.append(this.subView1.render().el, this.subView2.render().el);
}
Ưu điểm: Bạn không phải ủy quyền lại các sự kiện. Bạn không cần một mẫu chỉ chứa các phần giữ chỗ trống và tagName của bạn quay lại được xác định bởi chế độ xem.
Nhược điểm: Bây giờ bạn phải đảm bảo nối các thứ theo đúng thứ tự. Kết xuất của khung nhìn cha vẫn bị lộn xộn bởi kết xuất khung nhìn phụ.
Với một onRender
sự kiện:
initialize : function () {
this.on('render', this.onRender);
this.subView1 = new Subview({options});
this.subView2 = new Subview({options});
},
render : function () {
this.$el.html(this.template);
//other stuff
return this.trigger('render');
},
onRender : function () {
this.subView1.setElement('.some-el').render();
this.subView2.setElement('.some-el').render();
}
Ưu điểm: Logic của khung nhìn phụ hiện được tách ra khỏi render()
phương thức của khung nhìn .
Với một onRender
sự kiện:
initialize : function () {
this.on('render', this.onRender);
},
render : function () {
this.$el.html(this.template);
//other stuff
return this.trigger('render');
},
onRender : function () {
this.subView1 = new Subview();
this.subView2 = new Subview();
this.subView1.setElement('.some-el').render();
this.subView2.setElement('.some-el').render();
}
Tôi đã kết hợp và kết hợp một loạt các thực tiễn khác nhau trong tất cả các ví dụ này (rất xin lỗi về điều đó) nhưng đâu là những cách bạn sẽ giữ hoặc thêm? và bạn sẽ không làm gì?
Tóm tắt thực hành:
- Khởi tạo các cuộc phỏng vấn trong
initialize
hoặc trongrender
? - Thực hiện tất cả logic kết xuất khung nhìn phụ trong
render
hoặc trongonRender
? - Sử dụng
setElement
hayappend/appendTo
?
close
phương pháp và một cách onClose
làm sạch trẻ em, nhưng tôi chỉ tò mò về cách khởi tạo và kết xuất chúng ngay từ đầu.
delete
trong JS không giống như delete
từ C ++. Đó là một từ khóa được đặt tên rất kém nếu bạn hỏi tôi.