2012-05-06 8 views
0

У меня есть глобальная переменная, которая должна быть инициализирована, когда магазин загружен и нужно использовать это значение в другом магазине следующимExtJs: Инициализация глобальной переменной

var cp = 0; 

Ext.onReady(function() { 
    Ext.define('Init', { 
     singleton: true, 
     cp: 0 
    }); 

    Ext.define('loggedUserList', { 
     extend: 'Ext.data.Model', 
     fields: [ 
      'id', 
      'name' 
     ] 
    }); 

    loggedUser = Ext.create('Ext.data.Store', { 
     model: 'loggedUserList', 
     autoLoad: true, 
     proxy: { 
     type: 'ajax', 
     url: url+'/lochweb/loch/users/getLoggedUser', 
     reader: { 
      type: 'json', 
      root: 'provider' 
     }, 
     listeners: { 
      load: function(loggedUser) { 
       Init.cp = loggedUser.getAt(0).data.id; 
      } 
     } 
    }); 
}); 

Я использую значение ЦФ другой URL следующим образом: url: url + '/lochweb/loch/vocabulary/getVocabularyByProvider?providerId=' + Init.cp,

Ext.define('vocbList', { 
    extend: 'Ext.data.Model', 
    fields: [ 
     { 
      name: 'id', 
      mapping: 'id' 
     }, 
     { 
      name: 'code', 
      mapping: 'code' 
     } 
    ] 
}); 

var vocabulary = Ext.create('Ext.data.Store', {    
    model: 'vocbList', 
    autoLoad: true, 
    proxy: { 
     type: 'ajax',     
     url: url+'/lochweb/loch/vocabulary/getVocabularyByProvider?providerId='+Init.cp,      
     reader: { 
      type: 'json', 
      root: 'Vocabulary' 
     } 
    } 
}); 

но его значение все равно 0. Я попытался с помощью (ср, Init.cp). Как назначить его хранилище формы значений, чтобы его можно было повторно использовать?

Благодаря

ответ

4

Хранить данные асинхронно, поэтому вы не можете быть уверены, что Init.cp будет инициализирован новым значением до того, как будет загружен другой магазин. Попробуйте с этим:

var cp=0; 

Ext.onReady(function(){ 
Ext.define('Init', { 
    singleton: true, 
    cp: 0 
}); 

Ext.define('vocbList', { 
      extend: 'Ext.data.Model', 
      fields: [ 
       { name: 'id', mapping: 'id' }, 
       { name: 'code', mapping: 'code' } 

      ] 
     }); 



    var vocabulary = Ext.create('Ext.data.Store', {    
     model: 'vocbList', 
     proxy: { 
      type: 'ajax',         
      reader: { 
       type: 'json', 
       root: 'Vocabulary' 
      } 
     } 

Ext.define('loggedUserList', { 
       extend: 'Ext.data.Model', 
       fields: ['id','name'] 
      }); 

      loggedUser = Ext.create('Ext.data.Store', { 
       model: 'loggedUserList', 
       autoLoad: true, 
       proxy: { 
        type: 'ajax', 
        url : url+'/lochweb/loch/users/getLoggedUser', 
        reader: { 
        type: 'json', 
         root: 'provider' 
        }     
       }, 
       listeners: { 
        load:function(loggedUser){ 
         Init.cp = loggedUser.getAt(0).data.id; 
         vocabulary.getProxy().url = url+'/lochweb/loch/vocabulary/getVocabularyByProvider?providerId='+Init.cp; 
         vocabulary.load(); 
        } 
       } 

      }); 
}); 

Как вы можете видеть, вы должны установить URL словаря прокси динамически, когда первый магазин просто загружается, а затем загрузить в магазин.

Cyaz

+0

привет спасибо за предложение ur – user1321824

0

Здесь вы объявляете loggedUser = Ext.create('Ext.data.Store', { model: 'loggedUserList', autoLoad: true,...} с Init.cp назначается с некоторыми данными в нагрузке(). Но вы не можете подтвердить, что Init.cp действительно имеет значение в момент объявления переменной vocabulary (т. Е. Возможно, loggedUser еще не полностью загружен). Так что все равно 0 в URL-адресе.

Для подтверждения, вы должны двигаться коды vocbList и vocabulary в функцию:

function vocabularyLoad() { 
    Ext.define('vocbList', {...}); 
    var vocabulary = ... 
} 

и использовать функцию таким образом, в loggedUser:

loggedUser = Ext.create('Ext.data.Store', { 
    ... 
    listeners: { 
     load:function(loggedUser){ 
       Init.cp = loggedUser.getAt(0).data.id; 
       vocabularyLoad(); 
     } 
    } 
}); 

Но на самом деле, это рефакторинг делает назначение из Init.cp избыточно, потому что вы можете прямо передать значение loggedUser.getAt(0).data.id в определенную функцию.

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