javascript - ExtJS 4.2: टूलटिप्स सामग्री देखने के लिए पर्याप्त नहीं है




(6)

मैंने एक्स्टजेस 4.2 को अपग्रेड करने के बाद देखा है कि टूलटिप्स प्रदर्शित होता है जब टेक्स्टफील्ड में कोई त्रुटि होती है तो टूलटिप की सामग्री देखने के लिए पर्याप्त नहीं होती है - वे हमेशा 40px चौड़ी लगती हैं।

यहां एक परीक्षण केस है जो समस्या दिखाता है:

<html>
<head>
    <title>Field error tooltips</title>
    <link rel="stylesheet" type="text/css" href="ext-4.2.0/resources/css/ext-all.css">
    <script type="text/javascript" src="ext-4.2.0/ext-all-debug.js"></script>
</head>
<body>
    <script type="text/javascript">
    Ext.onReady(function(){

        var form = Ext.create("Ext.form.Panel",{
            title: 'My form',
            width: 300,
            height: 100,
            items: [
                {xtype: 'textfield', name: 'FIELD1', fieldLabel: 'Field 1', allowBlank: false}
            ],
            renderTo: Ext.getBody()
        });
    });
    </script>
</body>
</html>

उपर्युक्त उदाहरण में यदि आप फ़ील्ड पर क्लिक करते हैं और उसके बाद कुछ भी टाइप किए बिना इसे क्लिक करते हैं, तो यह टूलटिप दिखाता है कि इसे रिक्त होने की अनुमति नहीं है। दुर्भाग्य से संदेश देखने के लिए टूलटिप पर्याप्त नहीं है। क्या किसी ने इसे पहले देखा है?

धन्यवाद!

https://code.i-harness.com


Ext.tip.Tip.prototype.minWidth को हटाने से मेरे लिए सभी मामलों (आईई 10 पर) समस्या ठीक नहीं होती है, और जोड़ना

if(Ext.isIE10) { 
      Ext.supports.Direct2DBug = true;
}

टूलटिप्स को ठीक करता है लेकिन अन्य अजीब समस्याओं का कारण बनता है (टूलबार बटन मार्जिन कभी-कभी प्रभावित होते हैं!)। मैंने देखा सबसे अच्छा समाधान है:

Ext.override(Ext.tip.QuickTip, {
        helperElId: 'ext-quicktips-tip-helper',
        initComponent: function ()
        {
            var me = this;


            me.target = me.target || Ext.getDoc();
            me.targets = me.targets || {};
            me.callParent();


            // new stuff
            me.on('move', function ()
            {
                var offset = me.hasCls('x-tip-form-invalid') ? 35 : 12,
                    helperEl = Ext.fly(me.helperElId) || Ext.fly(
                        Ext.DomHelper.createDom({
                            tag: 'div',
                            id: me.helperElId,
                            style: {
                                position: 'absolute',
                                left: '-1000px',
                                top: '-1000px',
                                'font-size': '12px',
                                'font-family': 'tahoma, arial, verdana, sans-serif'
                            }
                        }, Ext.getBody())
                    );

                if (me.html && (me.html !== helperEl.getHTML() || me.getWidth() !== (helperEl.dom.clientWidth + offset)))
                {
                    helperEl.update(me.html);
                    me.setWidth(Ext.Number.constrain(helperEl.dom.clientWidth + offset, me.minWidth, me.maxWidth));
                }
            }, this);
        }
    });

ऐसा लगता है कि आईई 9 और 10, क्रोम और फ़ायरफ़ॉक्स पर काम करता है।


अभी भी इस पर और जिज्ञासा से बाहर देख रहे हैं ...

मैंने 4.1 और 4.2 स्रोतों की तुलना कुछ और करने की कोशिश की। मुझे लगता है कि समस्या कहीं कहीं ऑटो कंटेनर लेआउट में है। 4.1 और 4.2 के बीच सामान का एक टन बदल गया। तो हम इसे देख सकते हैं।

उम्मीद है कि यह कुछ लोगों के लिए काम करता है।

if(Ext.isIE10) { 
      Ext.supports.Direct2DBug = true;
  }

  if(Ext.isChrome) {
      Ext.define('Ext.layout.container.AutoTip', {
        alias: ['layout.autotip'],
        extend: 'Ext.layout.container.Container',

        childEls: [
            'clearEl'
        ],

        renderTpl: [
            '{%this.renderBody(out,values)%}',

            '<div id="{ownerId}-clearEl" class="', Ext.baseCSSPrefix, 'clear" role="presentation"></div>'
        ],

        calculate: function(ownerContext) {
            var me = this,
                containerSize;

            if (!ownerContext.hasDomProp('containerChildrenDone')) {
                me.done = false;
            } else {

                containerSize = me.getContainerSize(ownerContext);
                if (!containerSize.gotAll) {
                    me.done = false;
                }

                me.calculateContentSize(ownerContext);
            }
        }
    });

    Ext.override(Ext.tip.Tip, {
        layout: {
            type: 'autotip'
        }
    });
}

Ext.QuickTips.init();

आप इस मंच विषय पर अधिक जानकारी देख सकते हैं।


एक अन्य समाधान क्विकटिप की न्यूनतम चौड़ाई को ओवरराइड करना है क्योंकि फ़ील्ड लेआउट नई क्विकटिप बनाता है जो क्विकटिप सिंगलटन (दस्तावेज़ीकरण के विपरीत) पर निर्भर नहीं है।

Ext.override(Ext.tip.QuickTip,{
    minWidth: 200
});

क्षमा करें, मैं बहुत मदद नहीं कर सकता, यह 4.2.0 के साथ एक ज्ञात मुद्दा है जो उनकी अगली रिलीज में तय किया जाएगा। देखें: http://www.sencha.com/forum/showthread.php?257201

एक अस्थायी कामकाज के रूप में, यदि आपको टिप कंटेनर के गतिशील आकार की आवश्यकता नहीं है, तो आप केवल सीएसएस को ओवरराइड कर सकते हैं

.x-tip-form-invalid, .x-tip-body-form-invalid {
    width: 150px !important;
}

यदि आपको IE ब्राउज़र में टूलटिप EXTJS 4.2.1 पर समस्या का सामना करना पड़ रहा है। आपको अपने एएसपीएक्स पेज पर निम्न पंक्ति जोड़नी होगी:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

यह ओटीजे 4.2 की बग है, यह फ़ायरफ़ॉक्स 19 पर काम करता है लेकिन क्रोम 26 में नहीं

टूलपिप के लिए आपको सीएसएस कक्षा को ओवरराइड करना चाहिए:

.x-tip {
    width: auto !important;
}
.x-tip-body {
    width: auto !important;
}
.x-tip-body span {
    width: auto !important;
}