2012-06-18 18 views
8

Tôi có một chức năng được mô tả trong một trong các bộ điều khiển của tôi. Hàm này đảm nhiệm việc tạo biểu mẫu mà tôi cần sử dụng trong các trường hợp khác nhau, từ các chế độ xem khác nhau. Có thể và cách gọi hàm này là gì từ các khung nhìn mà tôi cần mà không cần thêm cùng một mã trong mỗi bộ điều khiển.ExtJS 4 - cách gọi chức năng từ một bộ điều khiển nhất định ở các góc nhìn khác nhau

Đây là mã của bộ điều khiển nơi tôi cố gắng sử dụng một phương pháp từ bộ điều khiển khác:

Ext.define('MY.controller.EventsController', { 
    extend: 'Ext.app.Controller', 
    models: [ 
     'EventsRecord'], 

    stores: [ 
     'Events'], 

    views: [ 
     'EventsGrid'], 
    refs: [{ 
     ref: 'EventsGrid', 
     selector: 'CalendarEvent' 
    }], 

    init: function() { 
     this.control({ 
      'CalendarEvent': { 
       afterEditFinish: this.askForNotify, 
       deleteEvent: this.deleteEvent, 
       calendarEditFunc: this.calendarEditFunc, 
       addCalendarEvent: this.addCalendarEvent, 
       itemclick: this.onSelectEnableBtn 
      } 
     }) 

    }, 

Ở đây tôi cố gắng sử dụng một cái gì đó giống như var contr = Ext.getController('SomeController'); and..nothing ..

askForNotify: function(editor, e) {... 

Trả lời

20

Làm cho nó trở thành một phần của lớp học toàn cầu với singleton: true và truy cập nó từ bất cứ nơi nào trong mã của bạn. Chỉ cần gọi phương thức bộ điều khiển từ chế độ xem là loại chống lại mô hình MVC ...

Cập nhật: Nếu bạn thực sự không thể thay đổi mã hiện tại - hãy làm như sau.

Lưu tắt tham chiếu đến các ứng dụng của bạn ở đâu đó (có đoán được bạn đã ứng dụng của bạn được xác định một cái gì đó như thế:

Ext.application({ 

    launch: function() { 
     _myAppGlobal = this; 
    } 
}); 

Sử dụng biến này để có được điều khiển bạn muốn:

_myAppGlobal.getController('MyController'); 
+0

Không thể làm việc với 'getController' để gọi hàm? Tôi đã thử với' Ext.getC ontroller ('name') 'và' this.getController ('name') và cả hai đã cho tôi một sai lầm 'getController không phải là một hàm' nhưng tôi nghĩ rằng đây là cách đúng đắn để đi. – Leron

+1

getController là một phương thức từ lớp Ext.app.Controller, vì vậy bạn cần có tham chiếu đến bộ điều khiển của chế độ xem hiện tại - một lần nữa tôi nghĩ rằng chống lại MVC :) – sha

+0

Trong thực tế, hãy để tôi giải thích. nên được hiển thị trong các dịp khác nhau (từ các chế độ xem khác nhau, trên các sự kiện khác nhau) nhưng biểu mẫu được xác định trong một bộ điều khiển. Điều gì làm yo nghĩ là cách tốt nhất để thực hiện một điều như vậy. Rõ ràng sao chép mã không phải là giải pháp đúng, tôi nghĩ rằng nên có một cách thích hợp để đặt mã trên một nơi và sử dụng nó từ nhiều nhưng tôi không chắc chắn chính xác những gì để làm gì? – Leron

4

Bạn có thể sử dụng này -

this.getController('Controller Name').someFn();