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

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

28.06.2016, 15:24. Показов 3102. Ответов 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 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru