2010-08-20 25 views
8

Tôi muốn xác định một số màu là hằng số trong một Nguồn CssResource của GWT và sử dụng các hằng số đó trong toàn bộ ứng dụng của tôi; nhưng tôi không biết làm thế nào để làm điều đó.Cần hằng số CSS của ứng dụng trong GWT

Tôi sẽ cho bạn biết những gì tôi đã thử. Tôi đã tạo một ClientBundle và CssResource như sau:

public interface Resources extends ClientBundle { 
    public interface MyStyle extends CssResource { 
    String JUNGLEGREEN(); 
    String example(); 
    ... 
    } 
    @Source("Resources.css") 
    MyStyle css(); 
} 

tôi đã xác định một số constants trong Resources.css:

@def JUNGLEGREEN #1F3D0A; 

Trong Resources.css, tôi sử dụng những hằng số như sau:

.example { color:JUNGLEGREEN; } 

Tôi không biết cách sử dụng lại các hằng số đó trong các tệp CSS và mẫu UiBinder khác. Tôi muốn làm điều này trong một số tệp UiBinder khác, nói LoginView.ui.xml:

<ui:with field='resources' type='com.example.Resources' /> 
<ui:style> 
    .mainPanel { 
    background:{resources.css.JUNGLEGREEN}; 
    ... 
    } 
</ui:style> 

... nhưng dường như không biên dịch. Bạn có biết làm thế nào tôi có thể đạt được mục tiêu của tôi?

+0

Câu trả lời này trong chuỗi khác nhau có thể hữu ích: [http://stackoverflow.com/a/10035774/490369](http://stackoverflow.com/a/10035774/490369) – alshan

Trả lời

0

Bạn sẽ có thể sử dụng

<ui:style> 
    @IMPORT url("../../../global.css"); 
    .mainPanel { 
    background:{resources.css.JUNGLEGREEN}; 
    ... 
    } 
</ui:style> 
+0

Cảm ơn Sudhir. Đáng buồn thay, nó sẽ không hoạt động. Tài liệu (http://code.google.com/p/google-web-toolkit/wiki/CssResource#Compile-time_import) cho biết "Tuyên bố @import sẽ chỉ hoạt động với các Nguồn CssResources khác, không phải cho các URL trong thời gian chạy, vì .gwt.xml hoặc StyleInjector có thể được sử dụng trong những trường hợp đó. " – David

+0

Không phải là Resources.css là cssResource? Một thời gian biên dịch nhập khẩu là những gì tôi đang nói về ... –

4

Đây là cách chúng tôi làm điều đó:

  • chúng tôi đặt tất cả các thuộc tính liên tục của chúng tôi trong một file constant.css
@def black #241b15; /* text color */ 
@def orange #ff4f00; /* links */
  • trong mỗi tệp ui.xml y Bạn có thể tham chiếu đến các hằng số theo cách sau:
<ui:style src="../../resources/css/constants.css"> 
    .myStyle { 
     color: orange; 
    } 
</ui:style>

Hy vọng điều đó sẽ hữu ích.

EDIT:

Để tránh đường dẫn tương đối trong các yếu tố <ui:style> bạn có thể làm như sau:

  • xác định hằng số của bạn một lần nữa trong một file css (nói constants.css)
@def junglegreen #1f3d0a;
  • tạo một ClientBundleCssResource để lấy hằng định nghĩa
public interface MyResources extends ClientBundle { 

    public static final MyResources INSTANCE = GWT.create(MyResources.class); 

    public interface Constants extends CssResource { 

     String junglegreen(); 
    } 

    Constants constants(); 
}

-sử dụng @eval chú thích để truy cập hằng

<ui:style> 
    @eval green com.gwt.client.widget.test.MyResources.INSTANCE.constants().junglegreen(); 

    .someClass { 
     color: green; 
    } 
</ui:style>

Cách duy nhất tôi biết làm thế nào để đối phó với các hằng số mà không cần tham khảo các tập tin css chính nó.

+0

Cảm ơn bạn, zOObs. Giải pháp của bạn là một phần ở đó, nhưng tôi không thích rằng đường dẫn đến tệp CSS có liên quan đến tệp ui.xml. Phải có cách tốt hơn. – David

+0

Đã thêm phương pháp thứ hai. Xem câu trả lời ban đầu của tôi. – z00bs

+0

Cảm ơn z00bs cho phương pháp thứ hai. Tôi đã gần như ở đó, nhưng tôi đã sử dụng một cái gì đó như ... MyResources.INSTANCE.Constants.junglegreen() thay vào đó, dẫn đến các thông báo lỗi khá khó hiểu ... – PhiLho

1

Tôi biết câu trả lời này có thể là muộn nhưng có thể giúp ai đó.Tôi đã có cùng một vấn đề và đã có thể giải quyết nó bằng cách thêm những điều sau đây:.

Resources.css() ensureInjected()

tôi đã thêm nó vào máy của tôi, nhưng thử nó trong một vài nơi và không có vấn đề mà tôi đặt nó, nó hoạt động.

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