Tôi có một PageView cấp cao nhất sẽ tự hiển thị lại bất cứ khi nào tuyến đường thay đổi. Tôi có nhiều khung nhìn con lồng nhau được nhúng vào PageView này. Nếu tôi phải trả lại PageView, tôi có cần xóa/hủy liên kết tất cả các khung nhìn con lồng nhau cùng với PageView hay tôi chỉ cần xóa/hủy liên kết PageView? Nếu tôi cần xóa/hủy liên kết tất cả các chế độ xem phụ, cách tốt nhất để thực hiện việc này là gì?Backbone.js - Xóa tất cả các chế độ xem phụ
Trả lời
Có, bạn cần phải loại bỏ đúng cách và unbind họ:
Cách đơn giản để làm điều này là để lưu trữ một loạt các phụ quan điểm của bạn trong giao diện cha mẹ. Sau đó, trong một phương pháp close
trên quan điểm phụ huynh, lặp qua mảng và gọi một phương thức close
trên quan điểm con:
ParentView = Backbone.View.extend({
initialize: function(){
this.childViews = [];
},
render: {
for (var i = 0; i < 10; i++){
var childView = new ChildView();
// do stuff with the child view
this.childViews.push(childView);
}
},
close: function(){
this.remove();
this.unbind();
// handle other unbinding needs, here
_.each(this.childViews, function(childView){
if (childView.close){
childView.close();
}
})
}
});
Hãy chắc chắn để gọi phương thức close
trên quan điểm phụ huynh khi bạn đã sẵn sàng cho nó được đã xóa/thay thế. Điều này sẽ đảm bảo tất cả các trẻ em được làm sạch đúng cách (giả sử tất cả trẻ em đều có phương pháp close
riêng của chúng).
Hey Derick, tôi đã theo lời khuyên của bạn về điều này nhưng tôi gặp phải sự chậm trễ thực sự lâu dài khi đóng một chế độ xem + đó là chế độ xem con. Trong một số trường hợp, nó có thể kéo dài 5-10 giây. Dường như sự chậm trễ đến từ this.remove(). Bạn có ý tưởng gì không? – ragulka
đó là khá dài, và khủng khiếp! Tôi chưa bao giờ thấy điều đó xảy ra, thành thật mà nói ... cấu trúc DOM mà bạn đang loại bỏ lớn đến mức nào? Đoán duy nhất của tôi sẽ là một trình duyệt thực sự chậm, và/hoặc một tập nút DOM rất lớn. –
Hey, nevermind - có vẻ như đó là một vấn đề với một plugin jquery thay vào đó là bằng cách nào đó xung đột với chức năng remove() của khung nhìn: http://stackoverflow.com/questions/9877786/calling-jquery-remove-on-custom-ui -widget-cause-infinite-loop/9878287 # 9878287 – ragulka
Thay vì giữ một loạt chế độ xem trẻ em, có thể lặp qua tất cả các thuộc tính của chế độ xem của bạn và xem những thuộc tính nào là một thể hiện của Backbone.View; bạn cần đảm bảo đặt thuộc tính cho mỗi chế độ xem con trong chế độ xem cha mẹ của bạn.
Trong ví dụ bên dưới, chế độ xem con được đặt thành thuộc tính của chế độ xem gốc. Tôi không chắc chắn những gì hiệu suất hit sẽ được looping thông qua tất cả các tài sản, tuy nhiên, nó có thể được dễ dàng hơn so với theo dõi của một cấu trúc dữ liệu riêng biệt cho các quan điểm trẻ em.
Ví dụ:
var ContextView = Backbone.View.extend({
initialize: function() {
// views render themselves via their initialize methods
this.titlebar = new TitlebarView({el: $("#titlebar")});
this.toolbar = new ToolbarView({el: $("#toolbar")});
this.content = new ContentView({el: $("#content")});
},
removeChildViews: function() {
for(var prop in this){
if (this[prop] instanceof Backbone.View) {
console.log("This is a view: "+ prop + ' in ' + this[prop]);
}
}
},
render: function() {
this.$el.html(this.el);
}
});
Một lớp học đơn giản và mô-đun bạn có thể thấy hữu ích.
ContainerView = Backbone.View.extend({
initialize: function() {
this.children = [];
},
remove: function() {
Backbone.View.prototype.remove.apply(this, arguments);
this.removeAllChildren();
},
removeAllChildren: function() {
_.each(this.children, function(view) { view.remove(); });
this.children = [];
},
appendAllChildren: function() {
_.each(this.children, function(view) { this.$el.append(view.render().$el); }, this);
}
});
sử dụng:
MyView = ContainerView.extend({
render: function() {
this.removeAllChildren();
this.$el.empty();
// For each child view...
// this.children.push(new SomeControl(...));
this.appendAllChildren();
return this;
}
});
Một chút giống như Zengineer đã viết, tôi muốn vá Backbone.View.remove toàn cầu như sau, để cho bất kỳ quan điểm con kèm theo về vấn đề này được loại bỏ
var originalRemove = Backbone.View.prototype.remove;
Backbone.View.prototype.remove = function()
{
for (var view in this){
if (this[view] instanceof Backbone.View && this[view] != this) {
this[view].remove();
}
}
originalRemove.apply(this, arguments);
}
- 1. cách xóa các chế độ xem phụ
- 2. Iphone xóa chế độ xem phụ
- 3. Xóa tất cả chế độ xem trẻ em khỏi chế độ xem
- 4. Monotouch: Xóa tất cả các bản xem trước khỏi một chế độ xem
- 5. Chế độ xem làm sạch với backbone.js?
- 6. Đặt GestureDetector cho tất cả các chế độ xem con
- 7. xóa chế độ xem phụ UIView dựa trên thẻ?
- 8. Backbone.js: Định tuyến cho các chế độ xem lồng nhau
- 9. Backbone.js: tái tạo lại hoặc tạo lại chế độ xem?
- 10. Chế độ Viper ở tất cả các chế độ
- 11. Tìm Chế độ xem Backbone.js nếu bạn biết Mô hình?
- 12. Sự kiện trong Backbone.js các chế độ xem lồng nhau
- 13. Lặp qua tất cả các bản xem trước của chế độ xem Android?
- 14. Backbone.js: cách thực hiện bộ sưu tập rác trên chế độ xem cha mẹ cũng như chế độ xem con
- 15. Làm mới tất cả chế độ xem trong Android?
- 16. Cách thêm chế độ xem phụ vào một chế độ xem trên web để chế độ xem phụ sẽ cuộn cùng với chế độ xem web?
- 17. Chế độ xem xóa iOS
- 18. Nhiều hàng trong bảng dưới dạng chế độ xem backbone.js?
- 19. Thêm UIView trên tất cả các chế độ xem khác, bao gồm StatusBar
- 20. Chúng tôi có thể xem tất cả các chế độ xem chú thích từ MKMapView
- 21. nhận dữ liệu mô hình cho chế độ xem backbone.js
- 22. chế độ xem tự động cập nhật trong backbone.js
- 23. Cách xem chế độ xem phụ huynh từ chế độ xem từng phần
- 24. Thêm cùng một nút vào tất cả các bộ điều khiển chế độ xem trong UINavigationController
- 25. Thêm chế độ xem của trình điều khiển chế độ xem con vào chế độ xem phụ của bộ điều khiển chế độ xem cha mẹ
- 26. cách xóa chế độ xem lưới?
- 27. xương sống xóa chế độ xem xóa el
- 28. thêm uiview dưới dạng chế độ xem phụ vào chế độ xem chính
- 29. Cách thêm UIImagePickerController làm chế độ xem phụ thay vì Chế độ xem Phương thức
- 30. Backbone.js - Thêm các sự kiện quan trọng khi chế độ xem đang hoạt động?
Bạn có ý gì bằng cách hủy liên kết các chế độ xem phụ? Bạn có nghĩa là sự kiện? – Trevor