2014-04-04 43 views
6

Tôi đang dùng Ember's Need Api để gọi một phương thức của bộ điều khiển trong bộ điều khiển khác. Tôi có thể lấy ví dụ của bộ điều khiển nhưng khi tôi gọi đó là phương pháp nó sẽ trả về cho tôi lỗi này TypeError: Object [object Object] has no method.Gọi phương thức bộ điều khiển trong bộ điều khiển khác Ember

Đây là cách tôi gọi đó là:

Cards.CardsIndexController = Ember.Controller.extend({ 
    needs: 'account_info', 
    actions: { 
     accountInfoStart:function(){ 
       console.log(this.get('controllers.account_info').test()); // error here 


     } 
    } 
}); 

Đây là bộ điều khiển có chức năng tôi muốn để gọi

Cards.AccountInfoController = Ember.Controller.extend({ 


    actions:{ 

     test: function(){ 

      alert(1); 
     } 

    } 

}); 

Làm cách nào để giải quyết?

Trả lời

11

test không phải là phương pháp kỹ thuật mà là một hành động hoặc sự kiện. Sử dụng các phương pháp send thay vì:

this.get('controllers.account_info').send('test', arg1, arg2); 
+0

Nhờ nó đang làm việc .. – mohsinali1317

+0

Đối với những người cần nó để làm việc với thư mục lồng nhau, đây là giải pháp cho thư mục: http://stackoverflow.com/a/29269015/499700 – poweratom

4

Theo tài liệu Ember; tạo một thuộc tính lười biếng tìm kiếm một bộ điều khiển khác trong vùng chứa. Điều này chỉ có thể được sử dụng khi xác định một bộ điều khiển khác.

di sản ứng dụng ember dụ:

App.PostController = Ember.Controller.extend({ 
    accountInfo: Ember.inject.controller() 

    this.get('accountInfo').send('test') 
}); 

hiện đại ví dụ ứng dụng ember:

// in an ember app created with ember-cli 
// below snippet would be the app/controllers/post.js file 
import Ember from 'ember'; 
export default Ember.Controller.extend({ 
    appController: Ember.inject.controller('application') 
}); 

Bạn có thể tìm thêm documentation about Ember.inject here

+2

Đối với người dùng lướt web, ans này wer là chính xác nhất cho các ứng dụng chạy Ember 2.x trở lên. – efx

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