2013-02-26 45 views
8

पर Ext.form सत्यापन स्क्रॉलिंग से बचें मेरे पास Ext.window के अंदर है। फॉर्म ऊंचाई खिड़की की ऊंचाई से अधिक है इसलिए मेरे पास खिड़की पर लंबवत स्क्रॉल है।शीर्ष

फॉर्म फ़ील्ड सत्यापन (validitychange ईवेंट पर) स्क्रॉल शीर्ष पर कूदता है।

इस व्यवहार से कैसे बचें?

उत्तर

1

मैं एक ही समस्या :(

मैं एक डरावने वैकल्पिक हल (यह 80% के लिए काम करता है) कभी कभी यह अभी भी शीर्ष पर कूदता है। आपको पता होना चाहिए बनाया है, कि मैं 'की एक लेआउट के साथ एक खिड़की है फॉर्म '। यदि आपके पास' फिट 'के एक' लेआउट 'के साथ' फिट 'का एक लेआउट है (उदाहरण के लिए) आपको कोड को थोड़ा सा बदलना पड़ सकता है। उदाहरण के लिए लाइन el.child ("। एक्स-विंडो-शरीर ", fasle) कार्य नहीं करेगा।

init: function() {    
    this.control({ 

      ... 

     /** My Ext.window.Window is called reservationwindow **/ 
     'reservationwindow': { 
      afterrender: function(comp) { 
       // comp is this Ext.Component == wrapper 
       var el = comp.getEl(); 
       //extjs adds the scrollbar to the body element... 
       var elForm = el.child(".x-window-body", false); 
       // or el.child(".x-panel-body", false); 

       //we are listinig to the scroll-event now 
       this.myFormEl = elForm; 
        this.safeScroll = {top:0, left:0}; 
       elForm.on('scroll', function() { 
        console.log("save"); 

        this.safeScroll = this.myFormEl.getScroll(); 
       }, this); 
       elForm.on('click', function() { 
        var resWin = this.getResWin(); 
        resWin.scrollBy(0,this.safeScroll.top,false); 
        console.log("reset"); 
       }, this); 
       elForm.on('keyup', function() { 
        var resWin = this.getResWin(); 
        resWin.scrollBy(0, this.safeScroll.top, false); 
        console.log("reset"); 
       }, this); 
      } 

आप देख सकते हैं, मैं स्क्रॉल घटना सुन रही हूँ और स्क्रॉल बार को सुरक्षित और रीसेट करें। कभी-कभी (विशेष रूप से यदि आप टेक्स्टबॉक्स में बहुत जल्दी लिख रहे हैं) घटनाएं एक अलग क्रम में आती हैं और पृष्ठ अभी भी शीर्ष पर पहुंच जाएगा। कभी-कभी आप इसे चारों ओर झिलमिलाहट भी देखते हैं (यदि इसे मूल स्थिति में वापस सेट करने के लिए बहुत लंबा समय लगता है)।

तो .... जैसा कि मैंने कहा, यह एक डरावना कामकाज है। यदि आपको एक बेहतर समाधान मिलता है, तो कृपया मुझे बताएं।

संपादित

मैं भी पता लगा, कि बढ़ने एक textareafield पर विकल्प उपद्रवियों से एक था।

{ 
    id: this.id + '-details', 
    xtype: 'textareafield', 
// grow: true,  now it isn't jumping 
    name: 'message', 
    fieldLabel: 'Zusätzliche Informationen', 
    labelAlign: 'top', 
    renderder: 'htmlEncode', 
    disabled: isDisabled, 
    anchor: '100%' 
} 
2

मैंने यह पता लगाने की कोशिश की, मेरे फॉर्मों में से एक क्यों स्क्रॉल हुआ और अन्य नहीं। बाहर निकला, कि मैं लेआउट मैनेजर को स्पष्ट रूप से निर्दिष्ट करना भूल गया हूं और वैध लेआउट मैनेजर (एंकर) वैधता परिवर्तन पर शीर्ष पर स्क्रॉल किया गया है, जबकि vbox लेआउट नहीं था। जबकि सब ठीक वही दिखता था (align: 'stretch' के साथ vbox), जब त्रुटि या तो छुपा या छुपाया गया तो यह अलग-अलग व्यवहार करता था।

+0

धन्यवाद, यह मेरे लिए काम करता है। 'लेआउट' में परिवर्तन लेआउट समायोजित करें। – wengeezhang