2012-06-04 28 views
6

के लिए जीडब्ल्यूटी ओबफस्केटेड शैली को ओवरराइड करने के लिए मैं DataGrid.css में परिभाषित डेटा ग्रिडहेडर शैली को ओवरराइड करने का तरीका जानने का प्रयास कर रहा हूं! जीडब्ल्यूटी कोर जीडब्ल्यूटी शैली का नाम adler32 के साथ obfuscated है, इसलिए मैं बस अपने सीएसएस में .dataGridHeader का उपयोग नहीं कर सकता। मेरे मामले में मैं सफेद-स्थान का सामान्य परिवर्तन चाहता हूं: सामान्य।डेटाग्रिड हेडर

मैंने देखा है कि यहां सीएसएस इंजेक्शन के बारे में लेख हो सकते हैं लेकिन वे सभी डेटाग्रिड जैसे घटक के भीतर उपयोग की जाने वाली उप शैली की बजाय कक्षा स्तर के रूप में दिखाई देते हैं।

मैं डेटाग्रिड जैसे किसी घटक के भीतर उपयोग की जाने वाली शीर्षलेख शैली को कैसे ओवरराइड कर सकता हूं?

उत्तर

10
बस किसी भी ClientBundle और CssResource साथ की तरह

: एक अंतरफलक है कि Datagrid.Resources प्रदान करता है और एक @Source एनोटेशन दोनों मूल फ़ाइल और अपने खुद के फाइल करने के लिए अपने खुद के सीएसएस फ़ाइल की ओर इशारा करते (या संभवतः के साथ dataGridStyle विधि ओवरराइड करता है बनाते हैं, तो वे करेंगे एक साथ संयुक्त हो)।

इसे उस तरह से कर आपके ऐप की पूरीDataGrid रों हालांकि के लिए शैली को पार कर जाएगी (यह वास्तव में निर्भर करता है जिस पर CssResource उदाहरण ensureInjected() पहले हो जाता है: मूल DataGrid.Resources से आपके एक या उप इंटरफ़ेस से एक): क्योंकि आप एक ही रिटर्न प्रकार (DataGrid.Style) का उपयोग करते हैं, तो obfuscated कक्षा के नाम समान होंगे।

आप तो एक मामला-दर-मामला आधार पर शैली बदलने के लिए, इसके अलावा में चाहते हैं, एक अंतरफलक है कि DataGrid.Style फैली घोषित करने और उपयोग करने वाले अपने dataGridStyle ओवरराइड करने के लिए वापसी प्रकार के रूप में: क्योंकि समझ से परे वर्ग के नाम पर आधारित है दोनों इंटरफ़ेस पूरी तरह से योग्य नाम और विधि का नाम, आपका DataGrid.Style उप-इंटरफ़ेस मूल DataGrid.Style इंटरफ़ेस की तुलना में अलग-अलग obfuscated क्लास नाम उत्पन्न करेगा।

फिर बेशक, GWT.create() अपने DataGrid.Resources उप-इंटरफ़ेस और इसे DataGrid कन्स्ट्रक्टर के लिए तर्क के रूप में पास करें।

भी http://code.google.com/p/google-web-toolkit/issues/detail?id=6144

+2

मैं काम करने के लिए अपना पहला सुझाव प्राप्त करने में सक्षम था, लेकिन मैं ensureInject आदेश के साथ यह नहीं कर सकता है। या तो ऑर्डर के परिणामस्वरूप मूल सीएसएस का उपयोग किया जा रहा है। DataGrid.java को देखते हुए ऐसा लगता है कि यह हमेशा अपने स्वयं के GWT.create परिणाम का उपयोग करता है। इसे कन्स्ट्रक्टर को पास करना काम किया। '\t सार्वजनिक इंटरफ़ेस MyResources डेटाग्रिड को बढ़ाता है। स्रोत { \t @ स्रोत ({DataGrid.Style.DEFAULT_CSS," DataGrid.css "}) \t 0Gडेटाग्रिड।स्टाइल डेटा ग्रिड स्टाइल(); \t} \t स्थैतिक MyResources संसाधन = GWT.create (MyResources.class); ' – Glenn

+1

केस-दर-मामले आधार पर एक अलग शैली का उपयोग करने के बारे में थोड़ा मुझे बचाया। धन्यवाद :) –

9

धन्यवाद थॉमस देखें।

बस इसे पाठकों के लिए आसान बनाने के लिए ...

एक नया इंटरफेस

public interface GwtCssDataGridResources extends DataGrid.Resources { 
     @Source({Style.DEFAULT_CSS, "gwtDataGrid.css"}) 
     Style dataGrid(); 
} 

एक स्थिर संदर्भ

public static final GwtCssDataGridResources gwtCssDataGridResources = GWT.create(GwtCssDataGridResources.class); 

    static { 
     gwtCssDataGridResources.dataGrid().ensureInjected(); 
    } 

अंत में एक नया CSS फ़ाइल gwtDataGrid.css बनाने का प्रयोग करें बनाएं । ध्यान दें कि यदि आपको शैली को ओवरराइड करने की आवश्यकता है, तो आपको का उपयोग करना होगा! प्रत्येक परिभाषा पर महत्वपूर्ण है।

.dataGridHeader { 
    color: #FF0000 !important; 
} 

.dataGridFirstColumnHeader { 
    -moz-border-radius-topleft: 5px; 
    -webkit-border-top-left-radius: 5px; 
} 

.dataGridLastColumnHeader { 
    -moz-border-radius-topright: 5px; 
    -webkit-border-top-right-radius: 5px; 
} 

है कि यह