2016-03-28 14 views
1

Ich habe einen Shop, wo ich seine Proxy in dem Konstruktor zu definieren versuche, etwa so:ExtJs 5 - Einstellen des Proxy für ein Geschäft

Ext.define('App.store.LabStore', { 
    extend: 'Ext.data.Store', 

    constructor: function(config) { 
     var prox = new Ext.data.proxy.Ajax(); 

     prox.setUrl('http://server:port/app/labs'); 
     prox.setHeaders({'Content-type': 'application/json'}); 
     prox.setReader({type: 'json',rootProperty: 'departmentList'}); 

     this.setProxy(prox); 
     this.callParent(arguments); 
    }, 

    autoLoad: false, 

    model: 'App.model.Lab' 
}); 

Leider wird dies nicht funktionieren. Was funktioniert, von meinem Controller, ist dies:

var labStore = Ext.create("App.store.LabStore"); 
var url = 'http://server:port/app/labs'; 

labStore.getProxy().setUrl(url); 

labStore.on('load','checkLabs',this); 

labStore.load(); 

Ich weiß, dass diese Methode funktioniert und vielleicht sollte ich einfach weitermachen, aber ich will versuchen, herauszufinden, warum ich nicht den Proxy im Konstruktor festlegen und/oder was ich falsch mache mit diesem Ansatz.

Vielen Dank im Voraus!

Frank

Antwort

0

Der config Parameter wird verwendet, um den Speicher zu initialisieren. Es enthält standardmäßig einen nicht definierten Proxy. Ich wäre ungefähr 90% sicher, dass es den Proxy während des Aufrufs des übergeordneten Konstruktors zurücksetzt.

Versuchen Sie stattdessen, den Proxy in das config-Objekt zu setzen.

Ext.define('App.store.LabStore', { 
    extend: 'Ext.data.Store', 

    constructor: function(config) { 
    var prox = new Ext.data.proxy.Ajax(); 

    prox.setUrl('http://server:port/app/labs'); 
    prox.setHeaders({'Content-type': 'application/json'}); 
    prox.setReader({type: 'json',rootProperty: 'departmentList'}); 

    config.proxy = prox; 
    this.callParent(arguments); 
    }, 

    autoLoad: false, 

    model: 'App.model.Lab' 
}); 
0

Es ist nicht notwendig, den Proxy im Konstruktor zu definieren. Sie können wie so alle Ihre Eigenschaften in Config-Objekt definieren:

//define model 
Ext.define('App.model.Lab', { 
    extend: 'Ext.data.Model', 
    fields: [{ 
     name: 'name', 
     type: 'string' 
    }, { 
     name: 'closed', 
     type: 'bool' 
    }] 
}); 

//define store 
Ext.define('App.store.LabStore', { 
    extend: 'Ext.data.Store', 
    model: 'App.model.Lab', 
    proxy: { 
     type: 'ajax', 
     url: 'labs.json', 
     reader: { 
      type: 'json', 
      rootProperty: 'departmentList' 
     } 
    }, 
    autoLoad: false 
}); 

//initialize store 
var store = Ext.create('App.store.LabStore'); 

// load data from source 
store.load(); 

hier einfiddle

ist, oder Sie können die Proxy-Konfiguration übergeben, wenn Speicher-Klasse erstellen, etwa so:

var store = Ext.create('App.store.LabStore', { 
    proxy: { 
     type: 'ajax', 
     url: 'labs.json', 
     reader: { 
      type: 'json', 
      rootProperty: 'departmentList' 
     } 
    } 
}); 

aber wenn Sie müssen tun es in einem Konstruktor können Sie:

//define store 
Ext.define('App.store.LabStore', { 
    extend: 'Ext.data.Store', 

    constructor: function(config) { 

     config = Ext.applyIf({ 
      proxy: { 
       type: 'ajax', 
       url: 'labs.json', 
       reader: { 
        type: 'json', 
        rootProperty: 'departmentList' 
       } 
      } 
     }, config); 

     this.callParent([config]); 
    }, 
    autoLoad: false 
}); 

Hier ist einfiddle

Verwandte Themen