Как использовать фильтры в GridPanel? - PullRequest
1 голос
/ 09 сентября 2011

Я начинаю с пути ExtJS 4, и мне нужно использовать функцию фильтров GridPanel.

Вот код для моей панели:

var panel = Ext.create("Ext.grid.Panel", {
  renderTo : "main"
, store    : store
, title    : "Users"
, columns  : [ /*...*/ ]
, // ...
// Important line --v
, features : [ { ftype : 'filters' } ]
, // ...
});

Как я понял из примера , мне нужно включить Ext.Loader, и я так и сделал. Однако после этого ExtJS пытается загрузить features/filters.js, который я нигде не могу найти, я попытался найти его в папке src/, но ничего не нашел.

Как мне заставить эту работу работать?


Обновление

@ nscrob указал мне на файл примера FiltersFeature.js. Я успешно загрузил файл, но мне все еще не хватает файла features/filter.js, который отсутствует с самого начала.

- Спасибо, ребята.

Ответы [ 7 ]

3 голосов
/ 09 сентября 2011

вы, вероятно, пытаетесь создать что-то вроде http://dev.sencha.com/deploy/ext-4.0.2a/examples/grid-filtering/grid-filter-local.html,, если вы проверите код js для этого примера, вы увидите, что функция фильтра является расширенным компонентом пользователя ... поэтому вы найдете компонент фильтра, определенный в примеры / УБ / сетка / FilterFeatures.js

Редактировать 9 сентября, 18:00

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

        'Ext.ux.grid.menu.ListMenu',
        'Ext.ux.grid.menu.RangeMenu',
        'Ext.ux.grid.filter.BooleanFilter',
        'Ext.ux.grid.filter.DateFilter',
        'Ext.ux.grid.filter.ListFilter',
        'Ext.ux.grid.filter.NumericFilter',
        'Ext.ux.grid.filter.StringFilter'

Файл, в котором нуждается этот компонент, находится в папке example / ux / grid

2 голосов
/ 07 ноября 2013

Причина, по которой 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(), как показано выше.

2 голосов
/ 11 апреля 2013

Я нашел решение здесь: http://www.sencha.com/forum/showthread.php?140370-Getting-404-error-The-requested-resource-(-EmployeeApp-feature-filters.js)-not-avail&p=626408&viewfull=1#post626408

Вы можете просто связать статически необходимые файлы в вашем index.html

<link rel="stylesheet" type="text/css" href="scripts/ext/examples/ux/grid/css/GridFilters.css" />
<link rel="stylesheet" type="text/css" href="scripts/ext/examples/ux/grid/css/RangeMenu.css" />
<script type="text/javascript" src="scripts/ext/examples/ux/grid/FiltersFeature.js"></script>
<script type="text/javascript" src="scripts/ext/examples/ux/grid/filter/Filter.js"></script>
<script type="text/javascript" src="scripts/ext/examples/ux/grid/filter/StringFilter.js"></script>
<script type="text/javascript" src="scripts/ext/examples/ux/grid/filter/ListFilter.js"></script>
<script type="text/javascript" src="scripts/ext/examples/ux/grid/filter/BooleanFilter.js"></script>
<script type="text/javascript" src="scripts/ext/examples/ux/grid/filter/NumericFilter.js"></script>
<script type="text/javascript" src="scripts/ext/examples/ux/grid/filter/DateFilter.js"></script>
<script type="text/javascript" src="scripts/ext/examples/ux/grid/menu/RangeMenu.js"></script>
1 голос
/ 15 апреля 2013

У меня так работает для ExtJs 4.2 - при ошибке features / filters.js не найдено

Ext.application({
......
requires: [
    'Ext.ux.grid.FiltersFeature',
    ..... more required files ....
]});
1 голос
/ 27 сентября 2012

Если вы получаете эту ошибку:

features/filters.js is not found

, это указывает на ошибку загрузки библиотек EXTJS.Обязательно оберните вызов, который инициализирует вашу сетку, в функцию Ext.onReady(), показанную в примере: http://dev.sencha.com/deploy/ext-4.0.2a/examples/grid-filtering/grid-filter-local.js

1 голос
/ 01 марта 2012

Я столкнулся с той же проблемой и наконец понял это.Вам нужно поставить Ext.Loader и Ext.require снаружи Ext.onReady.

Ext.Loader.setConfig({enabled: true});
Ext.Loader.setPath('Ext.ux', '../ux');
Ext.require([
    'Ext.grid.*',
    'Ext.data.*',
    'Ext.ux.grid.FiltersFeature',
    'Ext.toolbar.Paging'
]);

Ext.onReady(function(){
...YOUR CODE HERE
}
0 голосов
/ 09 сентября 2011

В файле, в котором выполняется функция запуска Ext.application, необходимо указать путь к расширениям пользователя, чтобы приложение знало, как загружать эти файлы, которые находятся за пределами структуры папок вашего приложения (или с аналогичным именем). Вы делаете это, устанавливая конфигурацию Ext.Loader для пути, используя:

Ext.Loader.setConfig({
    enabled: true,
    paths: {
        'Ext.ux':'ext-4.0.6/ux/' /*This should be the path to your top-level ux dir*/
    }
});

Другие ответы на этот вопрос верны, но ваша проблема заключается в поведении автозагрузчика. Путь к каталогу к каталогу ux должен быть относительно файла .js, вызывающего эту функцию.

...