2011-12-01 26 views
20

Đến từ GWT, Backbone dường như bỏ lỡ một giải pháp tích hợp về cách xử lý vòng đời của một chế độ xem. Trong GWT, mọi hoạt động, ít nhiều tương đương với View trong Backbone, được quản lý bởi một ActivityManager gọi onStart/onStop trên hoạt động, truyền eventBus và phần tử mà Activity có thể được hiển thị. ActivityManager sẽ hủy liên kết tất cả các sự kiện mà hoạt động đã liên kết với Eventbus và loại bỏ khung nhìn từ DOM.Mẫu để quản lý các khung nhìn trong xương sống

Trong xương sống, thật dễ dàng để ràng buộc các sự kiện để lập mô hình và thu thập nhưng bạn phải loại bỏ chúng theo cách thủ công và không có phương pháp api phổ biến nơi bạn sẽ làm điều này.

Vì vậy, tôi đang tìm mẫu thực hành tốt nhất về cách quản lý chế độ xem để đảm bảo không có lượt xem bị giết hoặc bị vô hiệu hóa đang lắng nghe không cần thiết đối với các sự kiện.

Trả lời

13

bạn nói đúng, không có giải pháp xây dựng cho điều đó (chưa).

tuy nhiên nó là tất nhiên càng tốt để mở rộng đường trục để cung cấp chức năng này, Derick Bailey đã viết một bài đăng blog về vấn đề này thời gian gần đây,

hãy xem ở đây: http://lostechies.com/derickbailey/2011/09/15/zombies-run-managing-page-transitions-in-backbone-apps/

này là do không có phương tiện Chén Thánh, bạn được tự do thực hiện như bạn muốn, nhưng nó là một cách tiếp cận rất thẳng về phía trước, để xử lý quan điểm zombie, bây giờ bạn vẫn cần phải chăm sóc các sinh vật khác thu thập dữ liệu trong bộ nhớ của bạn, nhưng đây là một sự khởi đầu với quan điểm ít nhất!

+0

Bài viết hay. Cảm ơn các liên kết. – ProTom

+0

Có bài viết đi đúng hướng, nhưng sau khi tất cả xem có trách nhiệm làm sạch. Im khóa cho một giải pháp mà quan điểm không quan tâm đến làm sạch, gây ra một người nào khác đang làm điều đó. Hãy suy nghĩ về các đội lớn hơn, nơi đôi khi ai đó quên dọn dẹp thủ công. Ngoài ra, bạn phải viết cùng một mã lặp đi lặp lại. –

+0

hệ thống như vậy không tồn tại với xương sống, vì chúng muốn cung cấp cấu trúc và linh hoạt, tất nhiên không ai có thể nghĩ về điều này, và bắt đầu một plugin, tuy nhiên tôi chưa nghe nói về điều này tự động (chưa). – Sander

5

Tôi đang sử dụng một BaseView tùy chỉnh, kéo dài phương pháp loại bỏ Backbone của:

app.BaseView = Backbone.View.extend({ 

    views: [], // array to keep a ref of child-views for proper disposal later on 

    remove: function() { 

     // dispose any sub-views 
     _.each(this.views || [], function(view) { 
      view.remove(); 
     }); 

     // if the inheriting class defines a custom on-remove method, call it! 
     _.isFunction(this.onRemove) && this.onRemove(); 

     // unbind all events from this view 
     this.off(); 

     // finally, call Backbone's default remove method to 
     // remove the view from the DOM 
     Backbone.View.prototype.remove.call(this); 
    } 
} 

Vẫn còn một nhược điểm: mô hình và bộ sưu tập cần phải được xử lý bằng tay, bởi vì bạn không biết nếu nó được sử dụng bởi các lượt xem khác nữa.

2

Tôi đăng giải pháp của mình để quản lý chế độ xem tại https://github.com/thomasdao/Backbone-View-Manager.

Trình quản lý chế độ xem sẽ luôn dọn dẹp chế độ xem hiện tại trước khi tạo chế độ xem mới. Bây giờ tôi sẽ khởi tạo một cái nhìn mới bằng cách:

newView = VM.createView("newView", function(){ 
      return new View(); 
      }; 

Nếu tôi muốn sử dụng lại một cái nhìn thay vì tạo một hình mới, tôi có thể sử dụng

newView = VM.reuseView("newView", function() { 
       return new View(); 
      } 

Chênh lệch giữa VM.reuseView và VM.createView đó là, reuseView sẽ tìm kiếm chế độ xem hiện tại có tên "newView", nếu tìm thấy nó sẽ trả lại cho bạn. Khác, nó sẽ thực hiện chức năng gọi lại và kết quả bộ nhớ cache. VM.createView sẽ luôn thực hiện chức năng gọi lại và dọn dẹp chế độ xem hiện tại cho bạn. Do đó, bạn có thể muốn sử dụng VM.createView nếu chế độ xem động và thường xuyên thay đổi

Các vấn đề liên quan