2012-06-08 34 views
8

Tôi đang sử dụng trình quản lý vùng Marionette để quản lý chế độ xem của mình. Có ba khu vực chính: 1] khu vực trên trình đơn 2] khu vực Sidebar 3] khu vực chính (trang thực tế mà tiếp tục thay đổi)Ẩn chế độ xem trong Trình quản lý vùng, khi một chế độ xem khác được hiển thị

Tùy thuộc vào các hành động trên menu trên cùng và thanh bên tôi liên tục thay đổi quan điểm cho rằng được hiển thị trong các khu vực chính sử dụng App.MainRegion.show(view).

Hiện tại, có một chế độ xem cụ thể (persistView) mà một khi được hiển thị sẽ không được đóng trừ khi tab/trình duyệt bị đóng.

Đương nhiên tôi không thể sử dụng App.MainRegion.show(view) đây vì lý do foll:

  1. Khi show(persistView) được gọi là thời gian mọi thứ đầu tiên là ổn.
  2. Nếu tôi điều hướng xa, show(otherview) sẽ gọi close() của persistView. Đó là không cần thiết.

giải pháp hiện tại của tôi là:

  1. Có một khu vực mới được gọi là persistRegion ngay dưới mainRegion.
  2. persistView sẽ luôn được hiển thị trong persistRegion.
  3. Trong onShow() của persistView, tôi giấu mainRegion và hiển thị các peristRegion

Các công trình trên, nhưng tôi nghĩ là rất hackish. Ngoài ra tôi đang mắc kẹt khi sau bước 3] người dùng điều hướng đến bất kỳ chế độ xem nào khác. Bây giờ làm thế nào để tôi nói với persistView rằng nó nên ẩn chính nó và hiển thị mainRegion?

Mọi trợ giúp sẽ được đánh giá cao.

Trả lời

25

Tôi cho rằng bố cục của bạn có vẻ tốt, về việc có một vùng để giữ chế độ xem "liên tục" so với chế độ xem chính. Nhưng tôi sẽ không để hai vùng đó biết về nhau hay cố gắng điều khiển màn hình của nhau. Thay vào đó, tôi sẽ tạo một đối tượng riêng biệt để biết cách thực hiện điều này.

Đối tượng này sẽ chịu trách nhiệm lắng nghe các sự kiện chính xác từ các chế độ xem và khu vực khác nhau có liên quan. Sau đó, nó sẽ xác định những khu vực để hiển thị và ẩn.

Điều quan trọng là cách bạn hiển thị và ẩn các khu vực. Bạn không muốn đóng các vùng và xóa các chế độ xem trong chúng - ít nhất, không phải là persistRegion. Những gì bạn có thể làm thay vào đó, mặc dù, là hide() của khu vực el

persistRegion.$el.hide()

persistRegion.$el.show()

thuộc tính $el của khu vực sẽ có mặt sau một cái nhìn đã được hiển thị trong khu vực, hoặc sau khi bạn gọi region.ensureElement().

+6

chỉ cần lưu ý: region.ensureElement() đã được thay đổi thành region.ensureEl() –

+1

... và nó đã thay đổi một lần nữa, thành '_ensureElement()' – alxndr

1

Tôi có thể đề xuất sử dụng phương thức reset() từ vùng marionette, thay vì ẩn và hiển thị phần tử của vùng. Đây là liên kết đến tài liệu http://marionettejs.com/docs/v2.4.4/marionette.region.html#reset-a-region => Có thể đặt lại khu vực bất cứ lúc nào. Việc này sẽ hủy mọi chế độ xem hiện tại đang hiển thị và xóa el được lưu trong bộ nhớ cache. Lần tiếp theo, khu vực hiển thị chế độ xem, el của khu vực được truy vấn từ DOM.

myRegion.reset(); Điều này rất hữu ích khi các vùng được sử dụng lại trên các trường hợp xem và trong thử nghiệm đơn vị.

+1

Bạn nên bao gồm thông tin liên quan từ liên kết trong câu trả lời của bạn rằng thông tin liên quan không bị mất trong trường hợp liên kết bị chết. – drneel

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