2013-01-05 34 views

Trả lời

35

RouterV2 không dễ dàng truy cập qua hằng số toàn cầu, khiến việc thực hiện theo cách 'sai' trở nên khó khăn hơn. Điều quan trọng cần lưu ý là bạn không nên truy cập vào bộ định tuyến (hoặc bất kỳ thứ gì khác) thông qua một biến toàn cầu. Làm như vậy là một thực tế không tốt, dẫn đến mã rất khó kiểm tra. Thật không may với các bộ định tuyến cũ nó đã được khá dễ dàng để làm một cái gì đó như App.router.transitionTo('whatever') - bạn có thể tìm thấy các ví dụ về rằng tất cả các nơi, nhưng nó không phải là một ý tưởng tốt.

Thay vì làm việc với tham chiếu chung, ember sẽ tiêm tham chiếu cục bộ vào bộ định tuyến chỉ ở những nơi cần thiết.

  • Từ mô hình: Không thể tiếp cận. Mô hình không nên được nói chuyện với các bộ định tuyến
  • Từ một bộ điều khiển: router = this.get('target')
  • Từ một cái nhìn: Xem không nên truy cập vào router, nhưng sự kiện nó gửi đến bộ điều khiển sẽ bong bóng lên. Ví dụ: this.get('controller').send('search', term)
  • Từ mẫu: Sử dụng {{action}} hoặc {{#linkTo}} người trợ giúp để gửi sự kiện (qua bộ điều khiển) hoặc chuyển sang url khác.

Để cụ thể hơn, xem các ghi chú về điều này cam kết: https://github.com/emberjs/ember.js/commit/5becdc4467573f80a5c5dbb51d97c6b9239714a8

** Update **

tôi đặt lại với nhau nói chuyện một tia chớp trên với chi tiết hơn về các bộ định tuyến mới cho tháng giêng EmberNYC meetup - slide đang ở đây: How I learned to stop worrying and love the router

+0

Và từ đường nó có thể truy cập như 'get (this, 'router)' – Pavel

1

tôi tin rằng công trình này ở khắp mọi nơi:

App.Router.router.transitionTo('home')

Tôi sử dụng nó trong chế độ xem. Tôi biết có một chút mùi mã ở đây. Tuy nhiên, nó hoạt động.

+0

Chắc chắn là một mùi mã. Thay vào đó, hãy gửi một hành động và xử lý nó trong một lộ trình để chuyển đổi. –

1

Bạn có thể thử này:

App.__container__.lookup('router:main').transitionTo('name_of_your_route'); 
+1

Việc này có thể thực hiện để gỡ lỗi nhưng nên tránh trong mã sản xuất. –

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