2013-07-26 2 views
0

Я пытаюсь загрузить List в Panel, но я получаю следующее сообщение об ошибкесписок не загружается в панели в сенче прикосновении

Uncaught TypeError: Cannot call method 'substring' of undefined 

вот мой ProfileContainer.js, который содержит List

Ext.define('demo.view.ProfileContainer', { 
    extend: 'Ext.Panel', 
    xtype: 'profilecontainer', 
    // requires: [ 'Ext.TitleBar', 'demo.view.ProfileList' ], 
    requires: [ 'Ext.TitleBar' ], 
    config: { 
     items: [{ 
      xtype: 'titlebar', 
      title: 'demo', 
      cls: 'bms-bg' 
     }, { 
      xtype: 'profilelist' 
     }] 
    } 
}); 

- код ProfileList.js

Ext.define('demo.view.ProfileList', { 
    extend: 'Ext.dataview.List', 
    alias: 'widget.profilelist', 
    requires: ['demo.store.ProfileStore'], 
    config: { 
     store: 'ProfileStore', 
     itemTpl: '{name}', 
    } 
}); 

вот мой ProfileStore.js

Ext.define('demo.store.ProfileStore',{ 

    extend:'Ext.data.Store', 

    config: { 
     model: 'demo.model.ProfileModel', 
     data:[ 

      { name: 'John Rambo' }, 
      { name: 'Brad Pitt'} 

     ] 
    } 
}); 

и ProfileModel.js

Ext.define('demo.model.ProfileModel', { 
    extend: 'Ext.data.Model', 
    config: { 
     fields: [ 

      { name: 'name', type: 'string' } 
     ] 
    } 
}); 

, но мой список разве загрузка в панель и я получаю выше упомянутой ошибки

ответ

0

xtypes являются псевдоним определяется как widget

Так вам необходимо определить их как:

alias:'widget.profilecontainer', 

или

alias:'widget.profilelist', 

Некоторая информация о require и uses:

У вас есть зависимость между вашими классами, которые должны быть решены. Обычно это делается с помощью buildtool или если вы не запускаете его самостоятельно.

зависимости одна из причин, почему вы используете require или uses где require можно threated в строгой, потому что гарантировать, что класс есть, как только получить необходимые

And here comes a the difference: because this is not valid if you lazy load. At this time the required class will be available after the class is defined. The build tool cleans this up places the required classes before the class definition

в то время как uses может быть обработанный как , потеряет, потому что он только гарантирует, что класс существует во время вызова Ext.onReady.

Обычно это не дает вам головной боли, но если определение класса требует, чтобы зависимости решались во время определения, он взорвется при загрузке кружева. Если вы теперь зависимость (xtype), что является причиной этого вы можете попытаться загрузить его вручную с помощью

Ext.require('class'); 

, который нужно получить помещается перед определением класса.

+0

Я определил 'alias: 'widget.profilelist'' в' ProfileList.js', и я использую его как 'xtype:' profilelist'' в' ProfileContainer.js', но все равно получаю ту же ошибку – Hunt

+0

@Hunt please расширьте свой вопрос новыми фрагментами кода. – sra

+1

@sra На самом деле все, что вам нужно в ST2, это 'xtype: 'my-xtype'', он работает так же, как' alias:' widget.my-xtype'' делает в ExtJS 4. – kevhender

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