Tôi cần áp dụng lớp "hoạt động" vào tab bootstrap tùy thuộc vào tên tuyến hiện tại. Đối tượng tuyến đường chứa "routeName" nhưng làm cách nào để tôi truy cập điều này từ bộ điều khiển hoặc thành phần?Truy cập tên tuyến hiện tại từ bộ điều khiển hoặc thành phần
Trả lời
cho Ember 2, từ một bộ điều khiển bạn có thể thử:
appController: Ember.inject.controller('application'),
currentRouteName: Ember.computed.reads('appController.currentRouteName')
Sau đó, bạn có thể vượt qua nó để thành phần.
Trong trường hợp tuyệt đối tuyệt đối, bạn có thể tra cứu bộ định tuyến hoặc bộ điều khiển ứng dụng (hiển thị thuộc tính 'currentRouteName') qua this.container.lookup("router:main")
hoặc this.container.lookup("controller:application")
từ bên trong thành phần.
Nếu đó là xu hướng chung đối với tôi, tôi sẽ tạo CurrentRouteService và đưa nó vào thành phần của tôi để tôi có thể thử nghiệm dễ dàng hơn trong các thử nghiệm của tôi.
Cũng có thể có một câu trả lời tốt hơn để đi cùng - nhưng container.lookup() sẽ loại bỏ trình chặn hiện tại của bạn.
Nó đang trả lại không xác định cho tôi: 'this.container.lookup (" router: main ").get ('currentRouteName') ' – jax
Sử dụng số này this.controllerFor('application').get('currentRouteName');
Tính năng này có hoạt động từ một thành phần không? – Huafu
@Huafu Nó sẽ hoạt động ở Ember 1. Tôi không chắc chắn về ember 2. Tôi đã từng làm việc trong ember một thời gian. Nhưng Im nghĩ rằng nó sẽ không vì bộ điều khiển được thay thế trong lợi của các thành phần định tuyến trong ember 2. Im thậm chí không chắc chắn họ đã di chuyển theo hướng đó. Nhưng nó sẽ là tuyệt vời nếu u có thể cập nhật ở đây nếu u tìm thấy một thay thế. – blessenm
Không, ý tôi là, 'controllerFor' là một phương thức công khai của' Ember.Route', trong Ember 2 nó cũng là phương thức tĩnh riêng của 'Ember', nhưng tôi không nghĩ nó là phương thức' Ember.Component ', thậm chí là riêng tư. Nói cách khác, điều này sẽ làm việc từ một tuyến đường nhưng không phải từ một thành phần vì 'controllerFor' không thể truy cập ở đó. – Huafu
Hãy thử điều này.
export default Ember.Route.extend({
routeName: null,
beforeModel(transition){
//alert(JSON.stringify(transition.targetName) + 'typeof' + typeof transition.targetName);
this.set('routeName', transition.targetName);
},
model(){
// write your logic here to determine which one to set 'active' or pass the routeName to controller or component
}
'
Trong thực tế, bạn không cần phải áp dụng lớp hoạt động một mình. Một người trợ giúp link-to
sẽ làm điều đó cho bạn.
Xem here:
{{link-to}}
sẽ áp dụng một tên lớp CSS của 'hoạt động' khi tuyến đường hiện tại của ứng dụng phù hợp với routeName cung cấp. Ví dụ, nếu tuyến đường hiện tại của ứng dụng là 'photoGallery.recent' việc sử dụng sau đây của{{link-to}}
:
{{#link-to 'photoGallery.recent'}}
Great Hamster Photos
{{/link-to}}
sẽ dẫn đến
<a href="/hamster-photos/this-week" class="active">
Great Hamster Photos
</a>
Cách sử dụng tuyệt vời của 'liên kết đến '! –
Sử dụng thông tin chi tiết từ câu trả lời của @ maharaja-santhir, người ta có thể nghĩ đến việc đặt thuộc tính routeName trên bộ điều khiển đích để sử dụng, ví dụ: trong mẫu của mục tiêu. Bằng cách này, không cần xác định logic ở nhiều vị trí và do đó có thể sử dụng lại mã. Dưới đây là một ví dụ về làm thế nào để thực hiện điều đó:
// app/routes/application.js
export default Ember.Route.extend({
...
actions: {
willTransition(transition) {
let targetController = this.controllerFor(transition.targetName);
set(targetController, 'currentRouteName', transition.targetName);
return true;
}
}
});
Xác định willTransition
hành động này trong con đường ứng dụng cho phép tuyên truyền tên tuyến đường hiện tại để bất cứ nơi nào trong ứng dụng. Lưu ý rằng bộ điều khiển đích sẽ giữ nguyên cài đặt thuộc tính currentRouteName
ngay cả sau khi điều hướng đến một tuyến đường khác. Điều này yêu cầu dọn dẹp thủ công, nếu cần thiết, nhưng nó có thể chấp nhận được tùy thuộc vào trường hợp triển khai và sử dụng của bạn.
- 1. ExNavigation - Điều hướng truy cập từ thành phần chính hoặc từ renderRight
- 2. Cách truy cập bộ điều khiển khác từ bên trong bộ điều khiển Symfony2
- 3. Truy cập UserProfile từ bộ điều khiển MVC 4
- 4. Truy cập vào bộ điều khiển xem bộ chứa
- 5. Nhận Tên Bộ điều khiển Hiện tại trong AngularJS
- 6. Làm thế nào để truy cập bộ điều khiển từ tuyến đường trong Ember?
- 7. Bộ điều khiển vùng MVC3 ASP.NET có thể truy cập từ các tuyến toàn cầu?
- 8. Làm cách nào để truy cập Bộ điều khiển Xem từ bộ điều khiển thanh tab?
- 9. Cách truy cập applicationContext từ Bộ điều khiển
- 10. plugins cordova truy cập từ bộ điều khiển ion
- 11. Truy cập vào thực thi bộ điều khiển hiện tại trong DelegatingHandler
- 12. Bộ phản ứng nhận được vị trí hiện tại trên thành phần bộ định tuyến chính
- 13. Mô hình truy cập Ember bên trong bộ điều khiển
- 14. Grails: Cách truy cập i18n từ bộ điều khiển hoặc dịch vụ?
- 15. Không thể truy cập phạm vi bộ điều khiển từ chức năng ràng buộc đầu ra thành phần góc
- 16. Truy cập bộ định tuyến ember mới trong bảng điều khiển
- 17. Tại sao bộ điều khiển dựa trên tên ASP.NET MVC?
- 18. Thay đổi điều khiển truy cập của điều khiển ASP.NET
- 19. truy cập tên khung nội tuyến từ iframe bên trong
- 20. Cách truy cập bộ điều khiển mvc trong bộ điều khiển api trên web để lấy pdf từ xem
- 21. Đặt tên cho bộ điều khiển gốc
- 22. Tôi có thể lấy bộ điều khiển thực hiện hiện tại từ HttpContext không?
- 23. Cập nhật dòng hiện tại trong Bàn điều khiển VB
- 24. AngularJS: Đọc thông số tuyến từ trong bộ điều khiển
- 25. Nhiều bộ điều khiển trong định tuyến
- 26. Nhận ID Bộ điều khiển Hiện tại trong Yii
- 27. Có một bộ điều khiển xem khác trước khi bộ điều khiển chế độ xem hiện tại xuất hiện
- 28. Cách truy cập biến phiên trong bộ điều khiển
- 29. AngularJS - Truy cập bộ điều khiển chỉ thị con
- 30. Truy cập các thành phần .NET từ Powershell
Có thể điều này this.controllerFor ('application'). Get ('currentRouteName') – blessenm
@blessenm yep, đó là khá nhiều những gì tôi muốn – jax
ember sẽ làm điều này cho bạn. chỉ cần sử dụng link-to trên các tab của bạn – killebytes