2013-10-25 63 views
0

我找不到一種方法可以讓我從組件或更好的屬性中提取屬性。這裏是一個例子:如何從一個wicket組件獲取HTML屬性?

  1. 我有兩個文本區域(組件)。
  2. 兩者都可擴展
  3. 在第一個輸入時,它會自動使用Ajax進行擴展,並且高度會增加。
  4. 我從第一個文本區域獲取高度屬性
  5. 我將第二個文本區域的高度設置爲第一個文本區域的高度。

    public class HomePage extends WebPage { 
    
    TextArea t = new TextArea("m", "hey");; 
    
    TextArea t2 = new TextArea("m2", 
        "this is a label with label ones attributes added"); 
    
    public HomePage() { 
    
    add(t.add(new AttributeModifier("height", "100;"))); 
    
    
    add(t2.add(HERE ADD THE ATTRIBUE HEIGHT FROM LABEL); 
    
    } 
    
+0

要實現對用戶界面是什麼?你是否想擴展第二個'textarea',然後在輸入時第一個增長? –

+0

因此,我輸入第一個,高度從100增加到150.我得到最終高度屬性(150)並將第二個textarea高度設置爲150. –

+0

如何獲得最終高度?通過js或通過行爲?因爲如果你只是用js來做,你可以應用jquery腳本來改變第二個textarea的風格,就是這樣吧 – Apostolos

回答

0

我的解決方案使用了JavaScript的高度修改。 t1是通過打字增長的,t2是正在調整高度的那個。乾淨,我認爲很好。

private TextArea textarea1() { 
    TextArea t1 = new TextArea("t1", Model.of("t1")); 
    final String js = "document.getElementById('%s').style.height = document.getElementById('%s').style.height;"; 
    t1.add(new OnChangeAjaxBehavior() { 

     @Override 
     protected void onUpdate(AjaxRequestTarget target) { 
      target.appendJavaScript(String.format(js, textarea2.getMarkupId(), textarea1.getMarkupId())); 
     } 
    }); 
    t1.setOutputMarkupId(true); 
    return t1; 
} 

private TextArea textarea2() { 
    TextArea t2 = new TextArea("t2", Model.of("t2")); 
    t2.setOutputMarkupId(true); 
    return t2; 
} 

早些時候在你的頁面/面板類中聲明私有字段,並指定他們兩個的textarea的

private Textarea textarea1; 
private Textarea textarea2; 

在構造函數:

textarea1 = textarea1(); 
textarea2 = textarea2(); 
add(textarea1); 
add(textarea2); 
+0

美麗的,我真的很喜歡你在那裏做的,這讓我以不同的(更好的)方式思考。 –

+0

我剛剛嘗試過,但我認爲可能會丟失一些東西。在eclipse中,在更新textarea2時出錯了,它說我需要創建一個局部變量。所以我不確定textarea2會如何更新? –

+0

是的,在你的類中聲明字段private TextArea textarea1,textarea2。通常在StackOverflow上,你沒有準備好複製粘貼和編譯的代碼,只是一個想法應該如何完成。它需要一些工作來集成到你的代碼中。 –