Причина, по которой ExtJS пытается загрузить ".../features/filter.js"
, заключается в том, что объект, который он ищет ("features.filter"), еще не определен.ExtJS предполагает, что это должно быть в файле с именем "features/filter.js"
.Однако на самом деле он определен в "grid/FeaturesFilter.js"
(где "features.filter"
определен как «псевдоним» для "Ext.ux.grid.FiltersFeature"
).
Большинство людей, у которых возникла эта проблема, прочитали документацию и пытаются загрузить Ext.ux.grid.FiltersFeature (обычно на "ux/grid/FiltersFeature.js"
), но время загрузки таково, что оно не загружается, когда это необходимо.Поэтому ExtJS пытается загрузить несуществующий файл.
Ключом к решению этой проблемы является обеспечение полной загрузки "Ext.ux.grid.FiltersFeature"
(а не только инициированной загрузки) к моменту инициализации сетки с помощьюфункция фильтров.
Разумная (и уместная) вещь - поместить "Ext.ux.grid.FiltersFeature"
в "requires"
класса, расширяющего сетку.Это должно гарантировать, что файл grid/FiltersFeature.js
будет загружен до того, как он вам понадобится.
// This should work
Ext.define("FrontSuite.view.MyGrid", {
extend: 'Ext.grid.Panel',
xtype: 'mygrid',
requires: [
'Ext.ux.grid.FiltersFeature'
],
title: 'My Grid',
...
features: [{
ftype : 'filters',
encode : true
}],
columns: [
{ dataIndex: 'id', text: 'ID'},
{ dataIndex: 'name', text: 'Name'}
]
}
Если по какой-то причине файл не загружается вовремя, вы можете указать (на первый взгляд избыточность) "Ext.ux.grid.FiltersFeature"
в Ext.application() call (ExtJS 4+)
.
Ext.application({
name: 'MyNamespace',
extend: 'MyNamespace.Application',
controllers: ['MyController'],
autoCreateViewport: true,
paths: {
'Ext.ux': 'path/to/my/ext/ux'
},
requires: [
'Ext.ux.grid.FiltersFeature'
]
});
ВАЖНЫЕ ЗАМЕЧАНИЯ ПО ВРЕМЕНИ ЗАГРУЗКИ КЛАССА: Помещение необходимого класса в правильную конфигурацию «require» для правильного требуемого класса важно, чтобы при выполнении сборки и созданииуменьшенный файл Javascript, вы получаете только те фрагменты кода библиотеки ExtJS, которые действительно необходимы.Тем не менее, вы должны следить за консолью Javascript для сообщений, в которых говорится, что ExtJS должен был загружать файл синхронно.Если это так, то «правильное» местоположение для «требуется» должно быть дополнено «избыточным требованием» где-то раньше, например в Ext.application()
, как показано выше.