2011-08-26 9 views
5

tôi muốn xác định một ref bên trong bộ điều khiển để bật/tắt nút xóa trên thay đổi lựa chọn. Nhưng tôi không hiểu đúng, vì vậy phương thức getDelButton() - Phương thức cung cấp không xác định. Xin vui lòng giúp đỡ ...ExtJs 4 tham chiếu đến nút thanh công cụ trong lưới

Bộ điều khiển:

refs:[ 
     { ref: 'tabPanel', selector: 'viewport > tabPanel' }, 
     { ref: 'grid', selector: 'tabPanel > usermanagementgrid' }, 
     { ref: 'delButton', selector: 'grid > button #delete'} 
], 

...

this.getDelButton().setDisabled(false); 

Xem định nghĩa:

dockedItems: [{ 
     xtype: 'toolbar', 
     items : [ { 
      xtype: 'button', 
      id: 'delete', 
      iconCls: 'drop-add', 
      text: 'Add', 
      tooltip: 'Press to add a new user.', 
      action: 'addUser', 
      scope: this, 
     }, 

Cảm ơn trước ...

+1

Vui lòng chấp nhận câu trả lời hoặc thêm nhận xét nếu bạn không nhận được những gì bạn cần. – LittleTreeX

Trả lời

0

tôi đã có một vấn đề tương tự, hóa ra là g thoát khỏi bộ chọn, thông thường bạn chọn bộ chọn xtype và lưới có lưới hoặc gridpanel. Thử sử dụng selector: 'gridpanel >button #delete'

7

Bạn rất có thể có 3 vấn đề với bộ chọn của bạn:

  1. Bạn không nên có một khoảng trống giữa các thành phần và các selector id. Sử dụng: button#delete.
  2. Vì nscrob đã đề cập, bạn có thể cần sử dụng gridpanel thay vì grid.
  3. button KHÔNG phải là con trực tiếp của grid. Đây có thể là con trực tiếp của số toolbar trong trường hợp này. Điều này có nghĩa là bạn phải làm điều gì đó giống như: gridpanel > toolbar > button#delete HOẶC gridpanel button#delete.

Trong tham chiếu đến # 3 ở trên, công cụ chọn > có nghĩa là TRẺ TRỰC TIẾP của cha mẹ. Điều đó có nghĩa là nghĩa đen là một đứa trẻ của cha mẹ, không chỉ là một thành phần ở đâu đó trong chuỗi làm tổ. Nếu bạn chỉ muốn kéo một nút trong số gridpanel của mình, hãy sử dụng gridpanel button. Điều này sẽ tìm kiếm thông qua tất cả các trẻ em của gridpanel và trong tất cả những trẻ em đó để tìm thấy bất kỳ điều gì phù hợp với button. Tuy nhiên, hãy nhớ rằng việc sử dụng nó theo cách này sẽ trả về TẤT CẢ các nút trong vòng gridpanel (trừ khi bạn chỉ định id).

Cuối cùng, việc sử dụng bảng điều khiển trong firebug sẽ giúp bạn NGAY LẬP TỨC. Mở firebug, và trong giao diện điều khiển, bạn có thể chạy lệnh. Vì vậy, tải lên lưới và chạy lệnh sau: Ext.ComponentQuery.query('gridpanel > toolbar > button#delete') và xem những gì được trả lại. Bằng cách này bạn không cần phải tiếp tục đi qua lại từ mã của bạn và làm mới cửa sổ trình duyệt. Hãy nhớ rằng query() trả về một mảng.

+0

+1 cho câu trả lời hoàn chỉnh. Nhưng tôi nghĩ rằng # 2 không phải là một nguyên nhân. Nếu không, sencha sẽ có các ví dụ không hợp lệ trong [docs] (http://docs.sencha.com/ext-js/4-0/#!/api/Ext.app.Controller) trong phần _Using refs_. –

+0

Tôi không phải là một chuyên gia về ExtJS bởi bất kỳ phương tiện nào. Tuy nhiên, khi tôi đã thử bằng cách sử dụng bộ chọn trong Ext.ComponentQuery.query() nó sẽ không hoạt động trừ khi tôi sử dụng gridpanel vs lưới. Tôi tò mò là tại sao, và nếu tôi tìm ra nó, tôi sẽ đăng nó ở đây. Cảm ơn bạn đã +1! – LittleTreeX