Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.10.2018, 00:17
Аспирант
Отправить личное сообщение для Ambassador Посмотреть профиль Найти все сообщения от Ambassador
 
Регистрация: 12.11.2015
Сообщений: 68

Ошибка при получении индекса записи 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 у меня точно есть объект моего комбобокса.
Почему возникает ошибка и как тогда правильно получить индекс записи?
Заранее спасибо.
Ответить с цитированием
  #2 (permalink)  
Старый 19.10.2018, 05:41
Интересующийся
Отправить личное сообщение для Swat2k Посмотреть профиль Найти все сообщения от Swat2k
 
Регистрация: 15.08.2017
Сообщений: 17

Ну и что тут не понятного? ты отрендерил combobox но у него нет стартового значения (и как следствие selection'а). И да, не путай индекс с internalId. Индексы должны получаться методами store.indexOf(rec), store.indexOfId(id).
И вообще используйте fiddle для примеров, так вам помогут гораздо быстрее.

Последний раз редактировалось Swat2k, 19.10.2018 в 05:43.
Ответить с цитированием
  #3 (permalink)  
Старый 19.10.2018, 11:00
Аватар для Infarch
Профессор
Отправить личное сообщение для Infarch Посмотреть профиль Найти все сообщения от Infarch
 
Регистрация: 06.06.2014
Сообщений: 292

Вопросик не по теме: а зачем вы присваиваете items в initComponent? Не проще ли сделать это прямо в конфиге класса?
Ответить с цитированием
  #4 (permalink)  
Старый 19.10.2018, 15:15
Аспирант
Отправить личное сообщение для Ambassador Посмотреть профиль Найти все сообщения от Ambassador
 
Регистрация: 12.11.2015
Сообщений: 68

Сообщение от Infarch Посмотреть сообщение
Вопросик не по теме: а зачем вы присваиваете items в initComponent? Не проще ли сделать это прямо в конфиге класса?
Делал по этому туториалу https://metanit.com/web/extjs/14.3.php
Определение items в initComponent разве это плохая практика или позже могут начаться проблемы?
Ответить с цитированием
  #5 (permalink)  
Старый 19.10.2018, 15:20
Профессор
Отправить личное сообщение для siber-biber Посмотреть профиль Найти все сообщения от siber-biber
 
Регистрация: 07.08.2013
Сообщений: 214

не все можно описать в виде JSON (к scope экземпляра например обратиться надо) вот в таких случаях идут в методы
Ответить с цитированием
  #6 (permalink)  
Старый 19.10.2018, 15:20
Профессор
Отправить личное сообщение для siber-biber Посмотреть профиль Найти все сообщения от siber-biber
 
Регистрация: 07.08.2013
Сообщений: 214

проблем не будет всё норм
Ответить с цитированием
  #7 (permalink)  
Старый 22.10.2018, 16:32
Интересующийся
Отправить личное сообщение для Swat2k Посмотреть профиль Найти все сообщения от Swat2k
 
Регистрация: 15.08.2017
Сообщений: 17

Сообщение от Ambassador Посмотреть сообщение
Делал по этому туториалу https://metanit.com/web/extjs/14.3.php
Определение items в initComponent разве это плохая практика или позже могут начаться проблемы?
Вообще это плохая практика
Ответить с цитированием
  #8 (permalink)  
Старый 22.10.2018, 19:05
Профессор
Отправить личное сообщение для siber-biber Посмотреть профиль Найти все сообщения от siber-biber
 
Регистрация: 07.08.2013
Сообщений: 214

Сообщение от Swat2k Посмотреть сообщение
Вообще это плохая практика
откуда сие?
Ответить с цитированием
  #9 (permalink)  
Старый 22.10.2018, 23:51
Интересующийся
Отправить личное сообщение для Swat2k Посмотреть профиль Найти все сообщения от Swat2k
 
Регистрация: 15.08.2017
Сообщений: 17

Сообщение от siber-biber Посмотреть сообщение
откуда сие?
Из опыта конечно же, в 4-ке это было оправданно, но 6-ке однозначно
нет, что именно вы хотите делать в initComponent ?
Ответить с цитированием
  #10 (permalink)  
Старый 23.10.2018, 05:17
Профессор
Отправить личное сообщение для siber-biber Посмотреть профиль Найти все сообщения от siber-biber
 
Регистрация: 07.08.2013
Сообщений: 214

"однозначно нет" - вот так вот раз и запретили использовать 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
        }
    ]
});
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблемы получения значений при открытии окна редактирования записи Ambassador ExtJS 4 11.09.2018 10:19
Ошибка при установке babel DVV Элементы интерфейса 0 01.09.2018 14:07
Ошибка при клике Зосимов Общие вопросы Javascript 10 09.06.2015 14:19
При мульти загрузке дублирует записи в базу. Как можно исправить? makarow.dmitry jQuery 0 20.12.2014 20:16
Как при чтении или записи свойства объекта вызывать функцию danik.js Общие вопросы Javascript 3 16.09.2010 17:57