extjs-autoload सच के साथ स्टोर आवेदन लांच पर लोड नहीं करना चाहिए




extjs4 extjs4.2 (2)

आप render हैंडलर को जोड़ सकते हैं जो कि स्टोर load विधि को कॉल करेगा और autoLoad अक्षम करेगा।

उदाहरण श्रोता:

Ext.define('Mb.view.winbiz.Owners', {
    extend: 'Ext.grid.Panel',
    [...],

    initComponent: function(){
        this.callParent();
        this.on('render', this.loadStore, this);
    },

    loadStore: function() {
        this.getStore().load();
    }
});

मेरे पास autoLoad: true साथ एक स्टोर से जुड़ा एक ग्रिड है autoLoad: true । समस्या यह है कि स्टोर लॉन्च पर लोड हो जाता है, भले ही दृश्य केवल बाद में बनाया जाता है जब मेनू के माध्यम से एक्सेस किया जाता है।

मैंने स्टोर को Application.js में और दृश्य में संदर्भित किया है, लेकिन मैं स्पष्ट रूप से न तो स्टोर या न ही दृश्य instatiating नहीं कर रहा हूँ।

मुझे नहीं पता कि यह कैसे प्राप्त करना है कि स्टोर को केवल तब ही लोड किया जाता है जब दृश्य द्वारा आवश्यक हो।

  • अगर मैं autoLoad: true लोड करता हूं autoLoad: true , स्टोर लॉन्च पर लोड हो जाता है।
  • अगर मैं autoLoad: false लोड करता हूं autoLoad: false , स्टोर बिल्कुल भी लोड नहीं होता है।

मुझे पता है यह बहुत बुनियादी है, लेकिन मैं अभी तक फँस गया हूँ।

संदर्भ के लिए सभी प्रासंगिक कोड यहां दिए गए हैं:
एप्लिकेशन / दुकान / Owners.js

Ext.define('Mb.store.Owners', {
    extend: 'Ext.data.Store',
    model: 'Mb.model.Owner',
    autoLoad: true,
    proxy: {
        ...
});

Application.js

Ext.define('Mb.Application', {
    name: 'Mb',
    extend: 'Ext.app.Application',
    models: [
        'Owner'
    ],
    stores: [
        'Owners'
    ],
    ...

एप्लिकेशन / देखें / Owners.js

Ext.define('Mb.view.winbiz.Owners', {
    extend: 'Ext.grid.Panel',
    alias: 'widget.test-gridPanel',
    store: 'winbiz.Owners',
    columns: [{
    ...

दृश्य नियंत्रक में तत्काल है:

Ext.define('Mb.controller.Winbiz', {
    extend: 'Ext.app.Controller',
    views: [
        'Owners'
    ],
    init: function(){
        this.control({
            'menu #test': {click: this.onMenuTest},
        })
    },
    onMenuTest: function(){
        this.getController('Main').addToMainTab('test-gridPanel');
    },

मैं दृश्य के नियंत्रक को स्टोर लोड को संभालता हूं।

स्टोर पर ऑटोलोड अक्षम करके प्रारंभ करें

Ext.define('Mb.controller.Winbiz', {
    extend: 'Ext.app.Controller',
    views: [
        'Owners'
    ],
    ownerStore: null,
    init: function(){
        this.control({
            'menu #test': {click: this.onMenuTest},
        });

        this.ownerStore = Ext.getStore('winbiz.Owners');
    },
    onMenuTest: function() {
        if (this.ownerStore.loaded === false) {
            this.ownerStore.load(
                scope: this,
                callback: this.onOwnerStoreLoaded
            );
        }
        else {
            this.addToTab();
        }            
    },
    onOwnerStoreLoaded: function (store, records, successful, eOpts) {
        if (successful) {
            store.loaded = true;
            this.addToTab();
        }
    },
    addToTab: function () {
        this.getController('Main').addToMainTab('test-gridPanel');
    }

जिस व्हील को स्टोर के लोड होने से पहले या बाद में बदलना है, वह दूसरा सवाल है।