ExtJS4 - MVC Store,检索数据

时间:2011-05-17 09:02:44

标签: javascript extjs extjs4

我有一个带存储,模型和视图的控制器(工具栏):

Ext.define('Cc.controller.Headers', {
  extend: 'Ext.app.Controller',

  stores: ['User'],
  models: ['Agent'],
  views: ['Header'],


  refs: [
    { ref: 'navigation', selector: 'navigation' },
    { ref: 'tabPanel', selector: 'tabpanel' },
    { ref: 'head', selector: 'head' },
    { ref: 'logoutButton', selector: 'head button[action=logout]'},
    { ref: 'helpButton', selector: 'head button[action=help]'}
  ],

  init: function() {
    this.control({
      'head button[action=logout]': {
        beforerender: this.initLogoutButton,
        click: this.onClickLogoutButton
      },
      'head button[action=help]':{
        click: this.onClickHelpButton
      }
    });
  },

  initLogoutButton: function(a){
    var store = this.getUserStore(),
      button = this.getLogoutButton();
    store.load();
    var user = this.getAgentModel();
    button.setText('Logout ['+user.get('lastname')+']');
    console.log(store.count());
  },

  onClickLogoutButton: function(view, record, item, index, e){
    alert('déconnexion');
  },

  onClickHelpButton: function(view, record, item, index, e){
    alert('help');
  }
});

我的问题出在 initLogoutButton 函数中。我需要从ajax请求中检索唯一的用户实例(始终只有一个实例)。我可以在js控制台中看到请求,一切都很好,但我不能用这些数据设置变量或数组!

此外, store.count()函数返回 0

1 个答案:

答案 0 :(得分:0)

如果您使用代理将数据加载到商店中,则应注意请求是异步的!您需要在存储加载数据后设置按钮文本。

store.load({
    scope   : this,
    callback: function(records, operation, success) {
        // check for success and set the value of button        
    }
});

在加载商店后调用回调函数,然后设置按钮值。