2011-10-24 23 views
6

Tôi đã cố gắng làm việc này trong một thời gian nhưng tôi vẫn chưa thể tìm ra giải pháp cho việc này trừ việc thêm một người nghe bên trong vào xem. Nhưng tôi muốn bộ điều khiển xử lý nó.Kích hoạt bộ điều khiển ExtJS trên siêu liên kết click

Có ai có ý tưởng về cách tôi có thể giải quyết vấn đề này không?

Đây là những gì tôi có trong tác phẩm của tôi tại thời điểm http://pastie.org/2751446

controller/App.js 

    Ext.define('HD.controller.App', { 
    extend: 'Ext.app.Controller' 
    ,views: [ 
     'core.Header', 
     'core.Navigation', 
     'core.Content' 
    ] 
    ,init: function() { 
     this.control({ 
      'navigation a[id=tab1]': { 
       click: this.newTab 
      } 
     }) 
    } 
    ,newTab: function() { 
     console.log('Tab 1 should be loaded now'); 
    } 
}); 

xem/lõi/Navigation.js

Ext.define('HD.view.core.Navigation', { 
    extend: 'Ext.panel.Panel' 
    ,name: 'navigation' 
    ,alias: 'widget.navigation' 
    ,layout: 'accordion' 
    ,region: 'west' 
    ,width: 200 

    ,title: 'Navigation' 
    ,collapsible: true 

    ,items: [ 
     { 
      title: 'Title 1' 
      ,html: '<a id="tab1" style="cursor:pointer;">Tab 1</a>' 
     }, 
     { 
      title: 'Title 2' 
      ,html: 'Second' 
     } 
    ] 
}); 

Trả lời

7

Cách bạn đang cố gắng để tham khảo các siêu liên kết a won' t làm việc.

this.control({ 
    'navigation a[id=tab1]': { 
     click: this.newTab 
    } 
}) 

Điều đó sẽ chỉ tìm kiếm các thành phần ExtJS, chứ không phải các thành phần DOM. Bạn rất có thể sẽ phải đính kèm các nhấp chuột trong phần sau hoặc một nơi nào đó tương tự. Điều này không có nghĩa là bạn không thể rời khỏi các phương thức làm tất cả công việc trong bộ điều khiển.

Edit:

var controller = this; 
controller.control({ 
    'navigation': { 
     afterrender: function() { 
      Ext.get('tab1').on('click', function() { 
       controller.newTab(); 
      }); 
     } 
    } 
}) 
+0

Cảm ơn s_hewitt trả lời. Tôi sẽ cố gắng quay cái này thành thứ gì đó hoạt động khi tôi về nhà từ công việc :) – Ole

+0

Tôi đã cố gắng giải quyết vấn đề này. Nếu tôi thay thế nhận xét trong phần sau của lượt xem bằng một cảnh báo, nó sẽ được kích hoạt đúng cách. Nhưng đó là liên kết giữa chế độ xem và bộ điều khiển mà tôi đang gặp phải. Ngoài ra tôi không chắc chắn nếu tôi đã thực hiện nó ngay về phần "newTab" trong bộ điều khiển của tôi. Đây là mã hiện tại của tôi: http://pastie.org/2757329 – Ole

+0

Di chuyển trình xử lý 'afterrender' sang bộ điều khiển của bạn. Xem chỉnh sửa của tôi. –

2

tôi đã phải vật lộn với vấn đề là tốt. Điểm mấu chốt là cấu hình điều khiển Bộ điều khiển không hoạt động giống như những người nghe thông thường và sẽ chỉ hành động trên các sự kiện được bắn bởi thành phần chứ không phải bởi DOM như s_hewitt đã chỉ ra.

Các lựa chọn thay thế có phần xấu xí với những người nghe chủ yếu về thành phần hoặc thành phần chính nơi bạn cũng có thể sử dụng các đại biểu. Một khi bạn đi con đường đó nó không phải là cắt sạch như thiết lập người nghe trong bộ điều khiển.

Một lừa tôi sử dụng để khắc phục hạn chế này đang kêu gọi các phương pháp điều khiển từ các thành phần view như thế này:

MyApp.app.getController('MyController').myFunction(); 
+0

Cảm ơn bạn đã đầu vào của bạn DmitryB. Nhưng bằng cách sửa đổi câu trả lời của s_hewitt một chút, ứng dụng của tôi bây giờ hoạt động an toàn trên tất cả các khung nhìn được điều khiển bởi bộ điều khiển của nó, nhưng tôi sẽ lưu ý điều này trong trường hợp tôi cần thực hiện một cách tiếp cận như thế này :) – Ole

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