2013-11-26 28 views
5

Tôi đang làm việc trên ứng dụng di động dựa trên ember.js (phiên bản 1.2) và tôi đang cố gắng tìm cách thành công nhất để triển khai thực đơn nút bật/tắt toàn cục là phổ biến trong nhiều ứng dụng dành cho thiết bị di động. Cụ thể, một nút nằm ở phía bên trái của thanh công cụ cố định, chuyển sang menu chính ngăn kéo ẩn khi người dùng ở chế độ xem nhà/cửa sổ của ứng dụng, tuy nhiên khi di chuyển sang tuyến phụ, nút sẽ hiển thị lại và khi được nhấp, nó sẽ đưa người dùng quay lại tuyến đường đã xem trước đó (hoặc quay lại tuyến đường chỉ mục nếu không có trạng thái lịch sử trước đó, tức là nếu người dùng truy cập trực tiếp vào tuyến phụ khi tải ứng dụng).Thực hiện nút quay lại "có điều kiện" trong ember.js

Fyi, hiện tôi có ứng dụng được cấu trúc bằng thanh công cụ trên cùng và nút bật/tắt menu trong mẫu ứng dụng gốc. Lý tưởng nhất là chức năng này sẽ hoạt động không có vấn đề làm thế nào một tuyến đường đang được chuyển đổi, cho dù thông qua transitionTo(), hoặc {{#link-to}} người trợ giúp, vv. Vì vậy, về cơ bản tôi muốn biết nếu Ember nội bộ duy trì bất kỳ loại lịch sử truy cập/log của những gì các tuyến đường đã được chuyển sang trong suốt thời gian của ứng dụng, và cũng là cách tốt nhất để điều kiện thay đổi hành động mà nút bật/tắt thực hiện và hiển thị của nó (còn gọi là biểu tượng của nó) tùy thuộc vào tuyến đường hiện tại. Và/hoặc có cách nào để nghe các sự kiện thay đổi tuyến đường của ember để tôi có thể tự mình thực hiện lịch sử đó nếu cần?

Trả lời

11

Tôi ghét phải là người mang tin xấu, nhưng tôi cũng ghét phải để bạn treo cổ.

Ember không theo dõi lịch sử, không có trường hợp sử dụng chung cho nó (đặc biệt là khi trình duyệt theo dõi nó cho bạn).

May mắn thay bạn có thể theo dõi các thay đổi của tuyến đường trong bộ điều khiển ứng dụng, điều này sẽ giúp bạn bắt đầu (Lưu ý rằng tôi không dành thời gian để giải quyết một giải pháp tuyệt vời hoạt động một cách hoàn hảo. sẽ cho phép bạn tìm ra các công việc hoạt động tốt cho bạn)

http://emberjs.jsbin.com/IZAZemEP/1/edit

App.ApplicationController = Em.Controller.extend({ 
    history: [], 

    hasHistory: function(){ 
    return this.get('history.length')>1; 
    }.property('history.length'), 

    watchHistory: function(){ 
    this.get('history').pushObject(this.get('currentPath')); 
    }.observes('currentPath'), 

    actions: { 
    goBack: function(){ 
     // implement your own history popping that actually works ;) 
     if(this.get('hasHistory')){ 
     this.get('history').popObject(); 
     window.history.back(); 
     this.get('history').popObject(); // get rid of route change here, don't need it 
     } 
    } 
    } 
}); 
+0

Vâng, tôi đã khá chắc chắn rằng ember không có bất cứ điều gì như thế built-in kể từ khi tôi không thể tìm thấy bất kỳ đề cập đến nó ở bất kỳ đâu trong hướng dẫn hoặc tài liệu API, nhưng chỉ muốn chắc chắn trước khi tôi tiến lên phía trước với việc triển khai một cái gì đó cho nó yself. Ví dụ của bạn nên là một điểm khởi đầu hoàn hảo cho điều này, cảm ơn rất nhiều! –

+4

Trong goBack action tôi sẽ thêm if (!! this.get ('hasHistory')) {} else {// transitionTo index} để tránh đá ai đó ra khỏi ứng dụng – ndreckshage

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