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

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

28.06.2016, 15:24. Показов 3146. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru