2016-03-28 5 views
1

У меня есть магазин, где я пытаюсь определить свой прокси-сервер в конструкторе, например, так:ExtJs 5 - Настройка прокси-сервера для магазина

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' 
}); 

К сожалению, это не будет работать. Что делает работу, от моего контроллера, это:

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(); 

Я понимаю, что последний метод работает и, возможно, я просто должен двигаться дальше, но я хочу, чтобы попытаться понять, почему я не могу установить прокси-сервер в конструкторе и/или то, что я делаю неправильно с этим подходом.

Заранее благодарен!

Frank

ответ

0

Параметр config используется для инициализации Store. Он включает по умолчанию неопределенный прокси. Я был бы на 90% уверен, что он перепродает прокси во время вызова родительского конструктора.

Попробуйте вместо этого установить прокси-сервер в объект конфигурации.

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

Нет необходимости определять прокси-сервер в конструкторе. Вы можете определить все свои свойства в объекте конфигурации следующим образом:

//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(); 

Вотfiddle

или вы можете передать прокси-конфигурации при создании магазина класса, например, так:

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

, но если вы нуждаетесь в, то для этого в конструкторе вы можете:

//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 
}); 

fiddle

 Смежные вопросы

  • Нет связанных вопросов^_^