2012-06-25 37 views
10

Có cách nào để chuyển hướng có điều kiện trong Bộ định tuyến Ember.js mà không phá vỡ tính nhất quán nội bộ của bộ định tuyến không?Emberjs: Chuyển hướng có điều kiện trong bộ định tuyến

+0

Bạn có thể giải thích thêm một chút lý do tại sao bạn' tái chuyển đổi sang một tuyến đường khác từ 'connectOutlets'? (Tôi là một noob trong ember, vì vậy có lẽ tôi chỉ không hiểu những gì bạn đang cố gắng làm) – MilkyWayJoe

+1

Bằng cách này, các tuyến đường bây giờ có một yếu tố 'chuyển hướng:' bạn có thể ghi đè lên, nó là trong hiện tại hướng dẫn. – totowtwo

Trả lời

23

gì bạn có thể làm (tính đến nay), là một cái gì đó như thế:

root: Ember.Route.extend({ 
    index: Ember.Route.extend({ 
     enter: function(router) { 
      var logged = /* get from appropriated source... */; 
      Ember.run.next(function() { 
       if (logged) { 
        router.transitionTo('loggedIn'); 
       } else { 
        router.transitionTo('loggedOut'); 
       } 
      }); 
     } 
    }), 

    loggedIn: Ember.Route.extend({ 
     // ... 
    }), 

    loggedOut: Ember.Route.extend({ 
     // ... 
    }) 
}) 

Đừng bỏ lỡ Ember.run.next như khi bạn đang ở trong enter, quá trình chuyển đổi trạng thái luôn luôn chờ giải quyết, vì vậy bạn phải chuyển tiếp sau đó.

Chúng tôi sử dụng nó như hiển thị cho authent, nhưng bạn có thể tưởng tượng được sử dụng nó cho bất cứ điều kiện bạn phải ...

+4

Nếu bạn làm điều đó trên 'connectOutlets' thay vì' enter' bạn không cần 'Ember.run.next'. –

+0

Cảm ơn sự chính xác! :-) –

+0

Bạn có ví dụ về cách thực hiện với 'connectOutlets' không? – Qrilka

2

Tùy thuộc vào những gì bạn đang cố gắng để làm, bạn có thể tìm kiếm sự chuyển tiếp có điều kiện. Điều này được bao gồm trong another stackoverflow question, TLDR trong đó là để kiểm tra this fiddle.

3

Router mới hiện nay bao gồm một cái móc

beforeModel 

mà bạn có thể qua đi để bao gồm logic có điều kiện khi chuyển sang một con đường. Móc beforeModel sẽ được gọi trước khi móc

model 

được gọi và nó được thông qua một đối tượng

transition 

. Bạn có thể quyết định xem bạn muốn chuyển hướng đến con đường khác sử dụng

transitionToRoute() 

hoặc bạn có thể hủy bỏ quá trình chuyển đổi nếu bạn không muốn chuyển hướng bằng cách gọi

transition.abort() 
Các vấn đề liên quan