2012-01-03 10 views
5

क्लिक किया मैं बहुत GWT के लिए नया हूँ, लेकिन मैं अब तक बहुत तेजी से प्रगति कर रहा है।GWT CellTable, ButtonCell को निष्क्रिय जब

मेरे पास एक सेल टेबल है, जिनमें से अधिकांश केवल आरपीसी से वापस डेटा पढ़ा जाता है।

मेरे पास सेल तालिका में दो कॉलम हैं जिन पर उपयोगकर्ता बातचीत कर सकता है। एक टेक्स्ट इनपुटपेल है, एक बटन बटन है।

जब उपयोगकर्ता बटनकेल पर क्लिक करता है, तो मैं उस पंक्ति के लिए टेक्स्ट इनपुटपुट में आरपीसी में मूल्य भेजना चाहता हूं।

मैं यह सब काम कर रहे है।

भाग जो मैं काम नहीं कर सकता वह यह है कि जब बटन (बटनसेल) क्लिक किया जाता है, तो मैं आरपीसी रिटर्न तक उस पंक्ति में बटन को अक्षम करना चाहता हूं, और उसके बाद इसे पुनः सक्षम कर सकता हूं। जब आरपीसी रिटर्न देता है तो मैं उस पंक्ति के लिए इनपुट सेल में टेक्स्ट को भी साफ़ करना चाहता हूं।

मैं यह नहीं समझ सकता कि वास्तविक बटन कैटल ऑब्जेक्ट को किस प्रकार क्लिक किया गया था या टेक्स्टइनपुटसेल उनके साथ बंदर को कैसे प्राप्त किया गया था।

किसी भी मदद की सराहना की।

BQ

उत्तर

4

समस्या बटन क्लिक किए गए के लिए कोई वस्तु नहीं है कि है। आपका बटनसेल HTML बनाता है जो बटन प्रस्तुत करता है - पूरे कॉलम में प्रत्येक बटन एक ही बटन सेल द्वारा लिखा गया था, लेकिन उनके साथ कोई जावा ऑब्जेक्ट नहीं है।

सीधे बटन को अक्षम करने के लिए, आपको पहले इसे एक हैंडल बनाना होगा। आप एचटीएमएल में एक आईडी प्रस्तुत करके ऐसा कर सकते हैं जो आपके बटनसेल बनाता है, और उसके बाद डीओएम से आईडी द्वारा तत्व प्राप्त कर रहा है।

मैं एक समान मामले में क्या करता हूं, जब राज्य परिवर्तन होता है तो पूरी तालिका को फिर से प्रस्तुत किया जाता है। यह इतना लंबा नहीं लगता है, और आपको किसी भी संदर्भ को स्टोर करने की आवश्यकता नहीं है (पूरे कारण से आप ग्रिड के बजाय सेलटेबल का उपयोग कर रहे हैं)। जब आप जानते हैं कि आपका बटन अक्षम होना चाहिए, तो आप इसे अक्षम कर दें।

इन दोनों सुझावों के लिए आपको अपने सेल ऑब्जेक्ट्स को उप-वर्गीकृत करने की आवश्यकता होगी ताकि आप कुछ कस्टम प्रतिपादन कर सकें। यह बहुत मुश्किल नहीं है, लेकिन संचालन के क्रम में अपने सिर को लपेटना भ्रमित हो सकता है। सौभाग्य!

पीएस: यदि आप बस बटन को अक्षम करना चाहते हैं (और टेक्स्ट फ़ील्ड को खाली नहीं करते हैं), तो मुझे लगता है कि ब्रोसेरएन्ट आपको Element पर एक हैंडल देता है जिसे क्लिक किया गया था - आप इसे अक्षम करने के लिए इसका उपयोग कर सकते हैं।

4

मैं इस समस्या से गुजर चुका हूं, लेकिन अंततः मैंने इसे हल किया।

जांच के लिए इस कोड

package com.ex7.client; 

import com.google.gwt.cell.client.ButtonCell; 
import com.google.gwt.cell.client.ValueUpdater; 
import com.google.gwt.dom.client.Element; 
import com.google.gwt.dom.client.NativeEvent; 
import com.google.gwt.safehtml.shared.SafeHtmlBuilder; 

public class CWButton extends ButtonCell { 
    private int row = -1; 
    private String alternativevalue; 
    private String exTitle = ""; 

    private String value; 
    private String title = ""; 

    public CWButton() { 
     super(); 

    } 

    @Override 
    public void render(com.google.gwt.cell.client.Cell.Context context, 
      String src, SafeHtmlBuilder sb) { 

     if (row == -1) { 
      sb.appendHtmlConstant("<button title='" + title + "' >" +value+"</button>"); 
      return; 
     } 

     if (row != context.getIndex()) { 

      sb.appendHtmlConstant("<Button disabled='disabled' title='" + title + "' >"+ value+"</button>"); 
     } else { 
      sb.appendHtmlConstant("<button title='" + exTitle + "' >"+ alternativevalue+"</button>"); 
     } 

    } 

    @Override 
    public void onBrowserEvent(com.google.gwt.cell.client.Cell.Context context, 
      Element parent, String value, NativeEvent event, 
      ValueUpdater<String> valueUpdater) { 

     if (row == -1 || row == context.getIndex()) { 
      super.onBrowserEvent(context, parent, value, event, valueUpdater); 
      return; 
     } 

    } 

    public void setTitle(String title) { 

     this.title = title; 
    } 

    public int getRow() { 
     return row; 
    } 

    public String getExTitle() { 
     return exTitle; 
    } 

    public void setExTitle(String exTitle) { 
     this.exTitle = exTitle; 
    } 

    public void setRow(int row) { 
     this.row = row; 
    } 

    public String getAlternativeValue() { 
     return alternativevalue; 
    } 

    public void setAlternativeValue(String alternativeValue) { 
     this.alternativevalue = alternativeValue; 
    } 

    public String getValue() { 
     return value; 
    } 

    public void setValue(String value) { 
     this.value = value; 
    } 

} 
संबंधित मुद्दे