2016-08-04 96 views
3

我試圖動態更改某些字段顏色,當它由於某些處理而發生更改時。CUBA平臺如何動態更改字段顏色

CUBA文檔解釋瞭如何通過網頁主題擴展(https://doc.cuba-platform.com/manual-6.2/web_theme_extension.html)靜態地完成它,但不是動態的。雖然在Vaadin(https://vaadin.com/wiki/-/wiki/Main/Dynamically%20injecting%20CSS)中有可能構建web gui的平臺。

我想,如果我使用Vaadin注入CSS的方式,它會工作(我會嘗試),但我會有Vaadin特定的代碼,我試圖避免。

有沒有CUBA這樣做的方式我錯過了?

編輯:

我想有一個表格的任意字段來改變背景顏色,當它已經從其初始值改變。根據CUBA文檔(https://doc.cuba-platform.com/manual-6.2/web_theme_extension.html),我需要: - 創建一個背景顏色的SCSS混合編輯器 - 在編輯器類中注入該字段以訪問它 - 對字段更改事件作​​出反應,然後定義樣式名稱現場的

我沒有創建SCSS混入,但有兩個問題,我有: 1)我想檢索字段實例動態,而不是將其注入(代碼保持乾淨和光) 2)我想的避免靜態定義背景顏色,以便可以在運行時對顏色進行參數化

對於1)我試圖注入fieldGroup並使用getFieldComponent(),然後在更改時將setStyleName的樣式應用於它。它工作,但我更願意爲輸入字段的每個字段定義此行爲。

對於2)除了使用注射CSS(和tighing我的代碼Vaadin(所以領導讓我離開通用接口)的Vaadin具體功能我不知道該怎麼辦

希望這是更清晰

+1

在你已經發布的鏈接:https://doc.cuba-platform.com/manual-6.2/web_theme_extension.html子部分的「創建新樣式」解釋你想達到什麼。唯一靜態的是樣式定義是靜態的。 「動態」是什麼意思? –

回答

1

不能從代碼中設置真正動態的顏色(任何RGBA)到現場,但你可以創建多個預定義的顏色爲你的領域:

@import "../halo/halo"; 

@mixin halo-ext { 
    @include halo; 

    .v-textfield.color-red { 
    background: red; 
    } 
    .v-textfield.color-blue { 
    background: blue; 
    } 
    .v-textfield.color-green { 
    background: green; 
    } 
} 

我不推薦使用從代碼注入樣式(如Vaadin頁一樣),因爲它是邏輯和公關的混合esentation。相反,你可以創建所有預定義的樣式(30-50風格應該是足夠了),並指定其在某些條件下使用setStyleName方法:如果你想申請的顏色變化的邏輯裏FIELDGROUP所有的TextField

public class ExtAppMainWindow extends AppMainWindow { 
    @Inject 
    private TextField textField; 

    private int steps = 0; 

    public void changeColor() { 
     if (steps % 2 == 0) { 
      textField.setStyleName("color-red"); 
     } else { 
      textField.setStyleName("color-blue"); 
     } 
     steps++; 
    } 
} 

您可以通過以下方式迭代FIELDGROUP領域:

for (FieldGroup.FieldConfig fc : fieldGroup.getFields()) { 
    Component fieldComponent = fieldGroup.getFieldComponent(fc); 
    if (fieldComponent instanceof TextField) { 
     TextField textField = (TextField) fieldComponent; 
     textField.addValueChangeListener(e -> 
       textField.setStyleName("color-red") 
     ); 
    } 
}