С Новым годом! Форум программистов, компьютерный форум, киберфорум
ExtJS
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
0 / 0 / 1
Регистрация: 28.03.2015
Сообщений: 59

Не определяется метод

28.06.2016, 15:24. Показов 3079. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.

У меня проблема, не получается вызвать метод. Выдает ошибку метод не определен.

Загружаю нужный мне класс:

JavaScript
1
2
3
4
5
6
7
Ext.define( 'pnppk.Operators.OperatorsScreen', {
    extend: '',
    requires: [
        'pnppk.Operators.OperationsComplete'
]
...
............................,
далее у меня есть кнопка по которой вызывается метод CreateFormOperations, который откроет окно:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
    CreateFormOperations: function (records) {
        var OperationStore = Ext.create('pnppk.Operators.Store.OperationStore');
 
        var selectedOrder = Ext.getCmp( 'order-grid' ).getSelectionModel().getLastSelected();
        var RC_ID = selectedOrder.get('ROUTE_CARD_ID');
        var SHOP_ORDER = selectedOrder.get('SHOP_ORDER');
        var ROUTE_CARD_NUMBER = selectedOrder.get('ROUTE_CARD_NUMBER');
 
        var xml = '';
        xml += ibs.utils.Common.createXmlElement( 'RC_ID', RC_ID );
        xml = ibs.utils.Common.createXmlElement( 'SearchCriteria', xml );
 
        OperationStore.load({
            scope: this,
            params: {Input: xml},
            callback: function (records) {
                if (records && records.length > 0) {
                    var title = "Операции по заказу: "+SHOP_ORDER+", МК: "+ROUTE_CARD_NUMBER;
                    var WinOper = Ext.create( 'Ext.window.Window', {
                        id: 'operation-window',
                        title: title,
                        width: 1200,
                        height: 420,
                        modal: true,
                        layout: 'border',
                        items: [{
                            xtype: 'grid',
                            region: 'center',
                            id: 'operation-grid',
                            multiSelect: false,
                            store: OperationStore,
                            columns: [
                                {
                                text: "Номер шага",
                                sortable: false,
                                forceFit: true,
                                minWidth: 100,
                                dataIndex: 'STEP_ID'
                                },
                                {
                                text: "Наименование операции",
                                sortable: false,
                                forceFit: true,
                                minWidth: 250,
                                dataIndex: 'NAME_OPERATION'
                                },
                                {
                                text: "Количество на МК",
                                sortable: false,
                                forceFit: true,
                                minWidth: 100,
                                dataIndex: 'QTY_Q'
                                },
                                {
                                text: "Подтвержденное количество",
                                sortable: false,
                                forceFit: true,
                                minWidth: 100,
                                dataIndex: 'QTY_C'
                                }
                            ]
                        }],
                        dockedItems: [{
                            xtype: 'toolbar',
                            dock: 'bottom',
                            items: [{
                                text: 'Закрыть',
                                cls: 'touch-screen-button',
                                handler: function () {
                                    Ext.getCmp( 'operation-window' ).close();
                                    }
                                },
                                {
                                text: 'Подтвердить',
                                cls: 'touch-screen-button',
                                handler: function () { debugger; this.CreateFormQtyCompletedWindow; }
                            }]
                        }]
                    });
                    WinOper.show();            
                }
            }
        });
 
    }
В этом окне у меня есть кнопка "Подтвердить", при нажатии на которую обработчик должен вызвать метод CreateFormQtyCompletedWindow, который как раз и находится в вызванном выше классе:

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Ext.define ('pnppk.Operators.OperationsComplete', {
 
Site: null,
Qty_Q: null, //Qty in Queue
Qty_C: null, //Qty complted
Qty_S: null, //Qty scrap
Step_Id: null,
Operations: null,
 
    CreateFormQtyCompletedWindow: function () {
debugger;
        this.Operations = Ext.getCmp('operation-grid').getSelectionModel().getLastSelected();
        this.Qty_Q = this.operations.get('QTY_Q');
        this.Qty_C = this.operations.get('QTY_C');
        this.Qty_S = this.operations.get('QTY_S');
        this.Step_Id = this.operations.get('STEP_ID');
 
    }
}
);

Сначала у меня все работало нормально, метод вызывался без проблем. Потом я что то поменял в методе и он перестал определяться. Я вернул все как было, но метод так и не определяется.

При трассировке в браузере, проверил - второй класс подгружается без проблем. Не могу понять почему метод не определяется.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.06.2016, 15:24
Ответы с готовыми решениями:

Не определяется метод getListAdapter()
Возникла такая проблема в след коде: public boolean onOptionsItemSelected(MenuItem item){ switch(item.getItemId()){ case...

JF v95c не определяется (или определяется как USB MEMORY BAR)
Недавно столкнулся с такой ситуацией. Подключаю флэху а она не работает... т.е. на win xp определяется как неопознанное устройство. на...

HDD определяется в BIOS но не запускается и неправильно определяется объем диска
Всем доброго времени суток, прошу вас о помощи в борьбе с моим винтом от ноута. Попробую описать подробно, как все было. В один прекрасный...

3
странник
 Аватар для Donald28
810 / 481 / 108
Регистрация: 28.05.2012
Сообщений: 1,518
Записей в блоге: 2
28.06.2016, 19:00
JavaScript
1
handler: function () { debugger; this.CreateFormQtyCompletedWindow; }
Проблема в волшебном слове this, так как в данном случае этот this вызывается не в рамках функции callback, а в рамках обработчика нажатия кнопки handler.
Решить можно через замыкания:

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
callback: function (records) {
     var componentHadNeedMethod = this;
     if (records && records.length > 0) {
       /* много кода */
                                {
                                text: 'Подтвердить',
                                cls: 'touch-screen-button',
                                handler: function () { 
                                          debugger; 
                                          componentHadNeedMethod.CreateFormQtyCompletedWindow(); 
                                }
                            }]
хотя у тебя возможно было так:
JavaScript
1
2
3
4
5
6
7
8
callback: function (records) {
     if (records && records.length > 0) {
       /* много кода */
                                {
                                text: 'Подтвердить',
                                cls: 'touch-screen-button',
                                handler: this.CreateFormQtyCompletedWindow
                            }]
тут ты указал, что handler будет вызывать не анонимную функцию а метод CreateFormQtyCompletedWindow (обрати внимания он без скобок на конце). И тут уже this будет указывать на нужный компонент.


P.S. этот код работать правильно не будет
JavaScript
1
2
3
4
5
        this.Operations = Ext.getCmp('operation-grid').getSelectionModel().getLastSelected();
        this.Qty_Q = this.operations.get('QTY_Q');
        this.Qty_C = this.operations.get('QTY_C');
        this.Qty_S = this.operations.get('QTY_S');
        this.Step_Id = this.operations.get('STEP_ID');
так как
JavaScript
1
this.Operations != this.operations
0
0 / 0 / 1
Регистрация: 28.03.2015
Сообщений: 59
29.06.2016, 13:31  [ТС]
Цитата Сообщение от Donald28 Посмотреть сообщение
Проблема в волшебном слове this, так как в данном случае этот this вызывается не в рамках функции callback, а в рамках обработчика нажатия кнопки handler.
Решить можно через замыкания:

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
callback: function (records) {
     var componentHadNeedMethod = this;
     if (records && records.length > 0) {
       /* много кода */
                                {
                                text: 'Подтвердить',
                                cls: 'touch-screen-button',
                                handler: function () { 
                                          debugger; 
                                          componentHadNeedMethod.CreateFormQtyCompletedWindow(); 
                                }
                            }]
Да я так пробовал уже сделать:

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
            callback: function (records) {
                var me = this;
                if (records && records.length > 0) {
                    var title = "Операции по заказу: "+SHOP_ORDER+", МК: "+ROUTE_CARD_NUMBER;
                    var WinOper = Ext.create( 'Ext.window.Window', {
............................................................................................
{
                                text: 'Подтвердить',
                                cls: 'touch-screen-button',
                                handler: function () { 
                                          debugger; 
                                          me.CreateFormQtyCompletedWindow(); 
                                }
                            }]
В результате выдает ошибку вроде как: "Объект не поддерживает свойство или метод CreateFormQtyCompletedWindow.

Цитата Сообщение от Donald28 Посмотреть сообщение
хотя у тебя возможно было так:
JavaScript
1
2
3
4
5
6
7
8
callback: function (records) {
     if (records && records.length > 0) {
       /* много кода */
                                {
                                text: 'Подтвердить',
                                cls: 'touch-screen-button',
                                handler: this.CreateFormQtyCompletedWindow
                            }]
тут ты указал, что handler будет вызывать не анонимную функцию а метод CreateFormQtyCompletedWindow (обрати внимания он без скобок на конце). И тут уже this будет указывать на нужный компонент.
Вот если делаю, вот так, то у меня вообще ничего не происходит. Ни ошибки, ни каких действий. Что очень странно. А если я создаю метод внутри это основного класса, то все нормально он вызывается.

И что значит когда указываю без скобок?

Добавлено через 59 минут
Все проблему решил, хотя как объяснить грамотно не смогу. Я кое что изменил, создал еще один класс. Вот решение:

Основной класс:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Ext.define( 'pnppk.Operators.OperatorsScreen', {
    extend: '',
    requires: [
        'Ext.form.*',
        'Ext.grid.*',
        'Ext.chart.*',
        'Ext.chart.axis.Gauge',
        'Ext.chart.series.*',
        'Ext.data.Store',
        'Ext.TaskManager',
        'Ext.util.Format',
        'Ext.grid.Panel',
        'ibs.CheckColumn',
        'ibs.utils.Common',
        'pnppk.Operators.Store.CellStore',
        'pnppk.Operators.OperatorsExit',
        'pnppk.Operators.OrderOperations',
        'pnppk.Operators.Store.OrderStore',
        'pnppk.Operators.Store.OperationStore',
        'pnppk.Operators.OperationComplete'
    ],
    init: function () {
 
 
        this.OrderOperations = new pnppk.Operators.OrderOperations( this.site, this );
 
        Ext.get( 'select-order' ).addListener( 'click', this.OrderOperations.CreateFormOperations, this.OrderOperations);
 
    },
При нажатии на кнопку 'select-order', вызывается метод из класса pnppk.Operators.OrderOperations.

pnppk.Operators.OrderOperations:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Ext.define( 'pnppk.Operators.OrderOperations', {
 
    site: null,
    parent: null,
 
    constructor: function(site, parent) {
        this.site = site;
        this.parent = parent;
        this.scope = this;
    },
 
    CreateFormOperations: function (records) {
             this.compl = new pnppk.Operators.OperationComplete(this.site, this);
                                 OperationStore.load({
            scope: this,
            params: {Input: xml},
            callback: function (records) {
 
/* много текста */
                                {
                                text: 'Подтвердить',
                                cls: 'touch-screen-button',
                                handler: this.compl.CreateFormQtyCompletedWindow
                            }]
Вот при нажатии на кнопку "Подтвердить" вызывается метод CreateFormQtyCompletedWindow, из третьего класса.
Выглядит конечно все тупо, но работает.

Добавлено через 5 часов 57 минут
Извиняюсь за глупый вопрос, но я кучу всего перечитал и не могу понять в чем тут разница при вызове со скобочками и без.
Цитата Сообщение от Donald28 Посмотреть сообщение
хотя у тебя возможно было так:

JavaScript
1
2
3
4
5
6
7
8
callback: function (records) {
 if (records && records.length > 0) {
 /* много кода */
 {
 text: 'Подтвердить',
 cls: 'touch-screen-button',
 handler: this.CreateFormQtyCompletedWindow
 }]
тут ты указал, что handler будет вызывать не анонимную функцию а метод CreateFormQtyCompletedWindow (обрати внимания он без скобок на конце). И тут уже this будет указывать на нужный компонент.
Я дальше столкнулся с проблемой, которая решилась как раз удаление скобочек и ";", после них, при вызове. Но не могу понять как это работает.

А про this прочитал кучу статей, везде пишут одно и тоже. И только со статьи 15 на хабре вроде как немного понял его применяемость и работу с ним.
0
странник
 Аватар для Donald28
810 / 481 / 108
Регистрация: 28.05.2012
Сообщений: 1,518
Записей в блоге: 2
29.06.2016, 14:16
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
var some_function = function(){
    console.log("call 'some function'"); // в качестве тела функции будем печатать в консоль сообщение
};
 
some_function(); // тут произошел вызов функции, т.е. в консоле браузера будет сообщение
var other_variable = some_function; // тут мы указали, что переменная other_variable будет содержать функцию some_function
 
other_variable; // ничего не произойдет, так как это равносильно:
var simple_variable = 10;
simple_variable;
 
other_variable(); // а вот тут мы опять вызвали функцию, в консоле смотри сообщение
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.06.2016, 14:16
Помогаю со студенческими работами здесь

HDD определяется в BIOS но не определяется в ОС
Доброе время суток! Столкнулся с проблемой связанным с винтом. После перезагрузки компа винчестер не определяется вин 7. Запуск винды при...

СЛАУ. Метод обратной матрицы, метод Гаусса, метод Крамера, метод Зейделя
Помогите ребят. Не могу построить алгоритмы для этих методов Язык C++

Nokia N95 определяется на windows 8.1, но не определяется на windows 7
Имеется мобила Nokia N95. Решил подключить к компу (Windows 8.1). Всё ОК. А тут вдруг решил к ноуту трубу воткнуть. Пишет, что "не...

Написать три алгоритма решения СЛАУ: Метод прогонки, метод квадратных корней, метод вращений
Начал писать курсовую. Нужно написать три алгоритма решения СЛАУ: прогонки, квадратных корней, вращений. С методом прогонки более менее...

Метод медиан из трех элементов VS улучшенный быстрый метод сортировки(метод Бентли-Макилроя)
Здравствуйте! Дали весьма интересное задание. Сравнить два вышеуказанных метода сортировки для массива из 10000 элементов, результаты...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru