Ошибка при получении индекса записи combobox
Здравствуйте, уважаемые форумчане!
Вопрос заключается в следующем: В Ext.window.Window я использую combobox:
Ext.define('BookApp.view.BookEdit', {
extend: 'Ext.window.Window',
alias: 'widget.bookwindowedit',
title: 'BookEdit',
layout: 'fit',
autoShow: true,
store: 'BookStore',
modal : true,
initComponent: function() {
var me = this;
me.myStates = Ext.data.StoreManager.get('States').load();
me.items = [{
xtype: 'form',
items: [
{
xtype: 'combobox',
fieldLabel: 'Status',
name: 'status',
store: me.myStates,
valueField: 'id',
displayField: 'name',
typeAhead: true,
queryMode: 'remote',
listeners: {
'select': function (combo, records) {
index = records.internalId;
filterCombo(combo, index);
},
'render': function (combo) {
index = combo.getSelection().internalId;
//console.log(index)
filterCombo(combo, index);
}
}
},
....
function filterCombo(combobox, index) {
store = combobox.getStore();
store.clearFilter();
store.filterBy(
function(record) {
if ((record.data.order_install == index - 1) || (record.data.order_install == index + 1)) {
return true;
} else {
return false;
}
}
);
};
При получение индекса записи в render: index = combo.getSelection().internalId; получаю ошибку: TypeError: combo.getSelection (...) is null В combo у меня точно есть объект моего комбобокса. Почему возникает ошибка и как тогда правильно получить индекс записи? Заранее спасибо. |
Ну и что тут не понятного? ты отрендерил combobox но у него нет стартового значения (и как следствие selection'а). И да, не путай индекс с internalId. Индексы должны получаться методами store.indexOf(rec), store.indexOfId(id).
И вообще используйте fiddle для примеров, так вам помогут гораздо быстрее. |
Вопросик не по теме: а зачем вы присваиваете items в initComponent? Не проще ли сделать это прямо в конфиге класса?
|
Цитата:
Определение items в initComponent разве это плохая практика или позже могут начаться проблемы? |
не все можно описать в виде JSON (к scope экземпляра например обратиться надо) вот в таких случаях идут в методы
|
проблем не будет всё норм
|
Цитата:
|
Цитата:
|
Цитата:
нет, что именно вы хотите делать в initComponent ? |
"однозначно нет" - вот так вот раз и запретили использовать template метод (https://docs.sencha.com/extjs/6.5.2/...-initComponent) созданный/поддерживаемый Sencha.. и еще и назвали это "плохой практикой", а сенча то и не знает.
а вот к примеру вам код компонента. с ним все в порядке?
Ext.define('MyApp.Panel', {
extend : 'Ext.Panel',
tellSomething : function () { console.log('Something'); },
tbar : [
{
text : 'Click me',
handler : this.tellSomething,
scope : this
}
]
});
|
| Часовой пояс GMT +3, время: 21:41. |