Вы не можете определить Ext.XTemplate inline, потому что он еще не был получен с сервера Ext.Loader, который обрабатывает загрузку зависимостей. Есть два решения:
// If you really want to add it to the prototype, but adding objects to the
// prototype is usually a bad idea since they are shared by all instances
// In this case, it may be ok, since there isn't much you can change about a
// template after you create it
Ext.define('myNameSpace.myComponentName', {
requires: ['Ext.XTemplate'],
}, function() {
// This callback is for when all the dependencies are loaded
myNameSpace.myComponentName.prototype.tpl = new Ext.XTemplate('someTemplate')
});
// Or just define it in initComponent, since you shouldn't instantiate it
// until after Ext.onReady is called (which means all dependencies are loaded)
Ext.define('myNameSpace.myComponentName', {
requires: ['Ext.XTemplate'],
initComponent: function() {
this.tpl = new Ext.XTemplate('someTemplate');
this.callParent();
}
});
ОБНОВЛЕНИЕ Я действительно забыл перечислить еще одну возможность, которая может работать, то есть не использовать new
, использовать Ext.create('Ext.XTemplate', args)'
. Проблема с Ext.create
заключается в том, что он будет блокироваться до тех пор, пока не будет загружена Ext.XTemplate
(и зависимости). Я бы по-прежнему использовал один из двух подходов, упомянутых вверху