extjs - Sencha-store.each()-डेटा उपलब्ध नहीं हैं, वे केवल डेटा कक्षा में गहरे हैं




(2)

स्टोर लदान अतुल्यकालिक है, जब तक आप इसे एक्सेस कर रहे हैं, तब तक यह लोड नहीं होता है। आपको स्टोर लोड ईवेंट को सुनने की आवश्यकता है

कुछ इस तरह:

store.on('load', function(storeRef, records, successful){
    //Loop through records
}, this);

पर () दस्तावेज़ीकरण

लोड घटना प्रलेखन

मुझे मिल गया है:

Ext.define("catcher.view.Login", {
   extend: "Ext.form.Panel",
// creating login form, including selectfield

स्टोर "टूर्नामेंट" स्टोर्स (ऑटोोलॉइड: सच) में बनाया गया है, इसका मॉडल है एर्टिंग सेट है गतिशीलता से चुनिंदा फील्ड्स को भरने की आवश्यकता है (अभी भी दृश्य में। लॉगिन वर्ग):

initialize: function(){
        var store = Ext.getStore("Tournaments");        
        var options = new Array();
        store.each(function(radek){
            options[radek.get("tournament_id")] = radek.get("tournament_name");
        });
    }

मैं store:"Tournaments" का उपयोग नहीं करना चाहता हूं store:"Tournaments" कॉन्फ़िग विकल्प, बाद के फॉर्म के कारण। Submit (); selectfield से सही डेटा नहीं भेजता है

समस्या है: console.log(store.getCount()); 0 देता है। store.add({ ... }) का उपयोग करके मैं कुछ भी जोड़ सकता हूं और getCount () रिटर्न कैंट गिनती (0 + add ()) देता है।

अजीब भाग: console.log(store) सभी वस्तुओं के अंदर data ऑब्जेक्ट सहित पूरे वर्ग को रिटर्न देता है। और अगले अजीब भाग - यदि मैं नियंत्रक में एक ही कोड का उपयोग करता हूं, तो सब कुछ काम करता है, स्टोर ठीक से लोड होता है और मैं mystore.each () का उपयोग कर सकता हूं;


setTimeout एक टाइमर हैंडल देता है, जिसे आप clearTimeout साथ टाइमआउट को रोकने के लिए उपयोग कर सकते हैं।

तो उदाहरण के लिए:

function setBgPosition() {
    var c = 0,
        timer = 0;
    var numbers = [0, -120, -240, -360, -480, -600, -720];
    function run() {
        Ext.get('common-spinner').setStyle('background-position', numbers[c++] + 'px 0px');
        if (c >= numbers.length) {
            c = 0;
        }
        timer = setTimeout(run, 200);
    }
    timer = setTimeout(run, 200);

    return stop;

    function stop() {
        if (timer) {
            clearTimeout(timer);
            timer = 0;
        }
}

तो आप इसका उपयोग इस प्रकार करेंगे:

var stop = setBgPosition();
// ...later, when you're ready to stop...
stop();

ध्यान दें कि setBgPosition खुद को फिर से कॉल करने के बजाय, मैंने अभी इसे 0 वापस सेट किया है। अन्यथा, यह काम नहीं करेगा। यह भी ध्यान दें कि टाइमआउट लंबित होने पर मैंने 0 को हैंडल मान के रूप में उपयोग किया है; 0 setTimeout से वैध वापसी मान नहीं है, इसलिए यह एक आसान ध्वज बनाता है।

यह उन (कुछ) स्थानों में से एक है जो मुझे लगता है कि आप setInterval बजाय सेट setInterval साथ बेहतर होंगे। setInterval दोहराता है। इसलिए:

function setBgPosition() {
    var c = 0;
    var numbers = [0, -120, -240, -360, -480, -600, -720];
    function run() {
        Ext.get('common-spinner').setStyle('background-position', numbers[c++] + 'px 0px');
        if (c >= numbers.length) {
            c = 0;
        }
    }
    return setInterval(run, 200);
}

इस तरह प्रयुक्त:

var timer = setBgPosition();
// ...later, when you're ready to stop...
clearInterval(timer);

उपर्युक्त सभी उपरोक्त, मैं यह setBgPosition करके setBgPosition को चीजों को बंद करने का एक तरीका ढूंढना चाहता हूं, यह पता लगाकर कि कुछ पूर्णता की स्थिति संतुष्ट हो गई है।