2011-07-13 6 views
5

Có vẻ như nó phải đơn giản như vậy, nhưng tôi chỉ đơn giản là không thể làm được điều này (tôi thậm chí không cần nó thực hiện động). Ví dụ: giả sử tôi có thiết lập lưới 2 cột đơn giản như vậy:Làm cách nào để áp dụng màu nền (hoặc lớp css tùy chỉnh) cho cột trong lưới - ExtJs 4?

columns : [  
     {header: 'USER', dataIndex: 'firstName', width:70, cls: 'red'}, 
     {header: 'CATEGORY', dataIndex: 'category', width:100} 
    ] 

Thuộc tính cls: 'red' chỉ tác dụng tiêu đề chứ không phải cột thực tế. Tôi đã thấy ở nơi khác mà tôi nên sử dụng một trình kết xuất tùy chỉnh (có thể), nhưng nếu tôi thử một cái gì đó như:

{header: 'USER', dataIndex: 'firstName', width:70, 
    renderer: function(value) { 
     this.addCls('red'); 
     return value; 
    } 
} 

Tôi vẫn nhận được nền trắng nhàm chán. Tôi cũng đã thấy mọi người sử dụng định nghĩa hàm renderer như sau: function(value, metadata, record, rowIndex, colIndex, store), nhưng khi tôi sử dụng alert() để kiểm tra tham số đầu vào, tôi nhận được undefined cho mọi thứ ngoại trừ value, điều này khiến tôi tin rằng điều này chỉ hợp lệ cho các phiên bản trước ExtJs 4.

Tôi cũng đã thử trả về một cái gì đó như '<span class="red">' + value + '</span>' trong hàm renderer của tôi, nhưng điều này chỉ đánh dấu văn bản, thay vì thay đổi toàn bộ nền của cột.

Tôi không muốn ghi đè lên các lớp Ext css mặc định vì tôi muốn áp dụng màu nền cho một lưới cụ thể trong ứng dụng chứ không phải tất cả chúng.

Hơn nữa, tất cả các cột của lưới đang đề cập có thể có các màu khác nhau (lưu ý rằng trong ví dụ tôi chỉ thêm lớp vào cột đầu tiên).

Giả sử rằng red được định nghĩa là .red {background:#FF0000;} trong tệp css của tôi.

Trả lời

6

Thêm thuộc tính tdCls vào định nghĩa tiêu đề cột của bạn, với giá trị của lớp CSS bạn muốn sử dụng.

columns : [ 
    {header: 'USER', dataIndex: 'firstName', width:70, tdCls: 'red'}, 
    {header: 'CATEGORY', dataIndex: 'category', width:100} 
] 
+0

Tính năng này hoạt động tốt cho ExtJS 4. – cjauvin

0

bạn muốn đọc tốt hơn này: http://www.sencha.com/learn/grid-faq/

phần 'Để sửa đổi một tế bào/dòng/cột'

+0

Tôi đã xem lại và dường như tài liệu này không hợp lệ cho ExtJs 4. Ví dụ: tôi đã thử tận dụng lớp được tạo tự động: x-grid3-td- {columnID} và nó không hoạt động . (Tôi cũng đã thử các biến thể hợp lý như: x-grid-td, và x-grid4-td). Tôi sẽ tiếp tục tìm kiếm nó và đăng các phát hiện của tôi. – LittleTreeX

7

Trong khi lưới faq đề xuất bởi atian25 không áp dụng cho ExtJs 4, tôi đã có thể để sử dụng nó để hướng dẫn tôi trả lời đúng cho câu hỏi của tôi.

Trong javascript, thêm một thuộc tính ID để định nghĩa cột của bạn:

{header: 'SomeHeader', id: 'myColumn' dataIndex: 'theData'} 

này sẽ tạo ra lớp css sau cho tất cả các yếu tố td trong cột đó:

.x-grid-cell-myColumn 

Trong css của bạn tệp (phải được tải sau tệp Ext css) thêm định nghĩa sau:

.x-grid-table .x-grid-cell-myColumn {background:#FF0000;} 

Và bingo, bạn có một nền màu đỏ tươi cho cột nói. Sử dụng kỹ thuật tương tự này, bạn có thể tùy chỉnh từng cột theo bất kỳ cách nào bạn muốn.

LƯU Ý: không sử dụng công cụ chọn .x-grid-table tính đặc hiệu của lớp "hàng" sẽ giành được. Bạn cũng sẽ cần phải xác định lại .x-grid-row-over nếu bạn muốn duy trì hiệu ứng di chuột qua cột tùy chỉnh của mình.

+0

đây là giải pháp kém cho một thứ có thể tái sử dụng vì id là duy nhất bạn không thể sử dụng nó nhiều lần trong cùng một lưới hoặc ví dụ: 2 lưới trong cùng một trang. @ GreenGiant 'tdCls' câu trả lời là giải pháp tốt hơn –

+0

@ jenson-nút-sự kiện bạn rất có thể là chính xác. Đây là giải pháp tốt nhất mà tôi có thể nghĩ ra lúc đó. Tuy nhiên, tôi đã ngừng sử dụng ExtJS ngay sau khi tôi đăng nội dung này và chưa xác minh hoặc thử bất kỳ điều gì khác. Không ít hơn, tôi sẽ đánh dấu câu trả lời của anh vì nó có vẻ phù hợp hơn. Cảm ơn bạn đã chỉ ra điều này. Tôi thậm chí không chắc chắn rằng phương pháp của ông là hợp lệ hoặc có thể vào thời điểm đó. ExtJS4 là khá mới sau đó, và nó chắc chắn dường như có nó chia sẻ của oddities và lỗi (một lý do lớn tại sao tôi ngừng sử dụng nó). – LittleTreeX

0

Mục đích là áp dụng một từ vào cột, mà tôi đã làm với getRowClass và sau đó xóa nó sau 1-2 giây. Websync đang đẩy dữ liệu mới sau mỗi 5 giây, vì vậy khi thay đổi thành ô xuất hiện, nó sẽ giống như một nhấp nháy của cột đã thay đổi (ô), quay lại "trắng" (mặc định) trước khi làm mới dữ liệu mới? Giá trị được gán để so sánh bản ghi mới với 0, nhưng trong trường hợp thực là giá trị cuối cùng đang được so sánh!