2013-04-09 34 views
25

Có cách nào dễ dàng để truy cập bộ điều khiển từ tuyến đường không?Làm thế nào để truy cập bộ điều khiển từ tuyến đường trong Ember?

<a href="#" class="btn" {{action "someAction" user}}>add</a> 

App.ApplicationRoute = Ember.Route.extend 
    events: 
    someAction: (user) -> 
     console.log 'give me name from currentUser controller' 

SomeAction rất chung chung và tôi nghĩ rằng ApplicationRoute là nơi tốt nhất cho nó.

Trả lời

25

Tôi nghĩ rằng phương pháp controllerFor nên có sẵn trong sự kiện này:

App.ApplicationRoute = Ember.Route.extend 
    events: 
    someAction: (user) -> 
     console.log this.controllerFor("currentUser").get("name") 

Cập nhật để đáp ứng với những câu hỏi trong commments:

Tất cả phụ thuộc vào những gì bạn muốn làm. Lo lắng về DRY trên phương pháp cơ bản như vậy, không có nhiều ý nghĩa.

Trong tiếng tăm của bạn rời trường hợp tôi sẽ làm điều này:

App.ApplicationRoute = Ember.Route.extend 
    events: 
    someAction: (user) -> 
     this.controllerFor("currentUser").decrementKudos(); 
     // implement the decrementKudos in your controller 

Nhưng tôi đoán lưu trữ này một bộ điều khiển cũng nên làm việc, nếu điều này là quá nhiều mã cho bạn:

App.ApplicationRoute = Ember.Route.extend 
    currentUserCon : this.controllerFor("currentUser") 
    events: 
    someAction: (user) -> 
     this.currentUserCon.decrementKudos(); 
     // implement the decrementKudos in your controller 
+0

Cảm ơn, nhưng có thể tham chiếu đến thuộc tính đó, ví dụ: tôi có thể lưu trữ nó trong một biến để tôi có thể hoạt động trên đó không? 'name = this.controllerFor ('currentUser'). Hãy lấy 'name'' ' return "hello, # {name}' có thể không? Truy cập bộ điều khiển theo cách nhiều lần không phải là DRY :) – wryrych

+0

Ví dụ đây sẽ là một quá mức cần thiết: 'this.controllerFor ('currentUser') .đặt 'kudosLeft', this.controllerFor ('currentUser'). get 'kudosLeft' - 1' :) – wryrych

+1

Xem phản hồi được cập nhật của tôi. – mavilein

7

Trong phiên bản mới hơn của ember, bạn có thể truy cập bộ điều khiển tuyến đường hiện tại trên đường như sau

Phiên bản Ember 2.5

currentUserCon : this.controller 

nếu bạn muốn truy cập bộ điều khiển tuyến đường khác, sau đó sử dụng phương pháp controllerFor.

this.controllerFor('path to controller'); //put path to controller as parameter. 
+1

I ' đã tìm thấy (ít nhất là trong ứng dụng Ember 2.14 của tôi) rằng 'this.controller' này là' undefined' ít nhất thông qua hook route 'activate()', nhưng 'controllerFor ('cu rrent.route.name ') 'sẽ trả về bộ điều khiển. –

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