MisterN 21 июня 2016 0 8
Понимаю, что заголовок не информативен, но не могу придумать ничего короткого и конкретного. Наверно это где-то описывалось, но я и ключевые слова не могу выдумать, чтобы искать.
Подскажите, вот в админке допустим стандартно запускается.
Вот допустим создается функция MODx.form.Handler
Вот она расширена через Ext.extend и передается в Ext.reg. Это все еще же функция, используемая в качестве конструктора.
Но вот мы видим, что почему-то мы обращамеся к объекту MODx.form.Handler.errorExt(a.result,frm) так, будто где-то вызвано

MODx.form.Handler = Ext.ComponentMgr.create({xtype: "test-form-handler"});

Но где это происходит и как?

UPD
Вот здесь все случается

Ext.onReady(function() {
    MODx.util.JSONReader = MODx.load({ xtype: 'modx-json-reader' });
    MODx.form.Handler = MODx.load({ xtype: 'modx-form-handler' });
    MODx.msg = MODx.load({ xtype: 'modx-msg' });
});

MODx.load передает аргументы в Ext.ComponentMgr.create, как и писал выше.
В php многое из этого бы наверно делалось бы статичными методами, но не смотрел подробно эти объекты, не уверен…
8 комментариев
Fi1osof1
Fi1osof 21 июня 2016г в 19:21 #
Вообще ничего не ясно ни из заголовка, ни из топика. Выкладывай свои коды, описывай задачи, чем ты не доволен и там уже будем посмотреть. А так гадание какое-то получается.
M
MisterN 21 июня 2016г в 19:40 #
Вот в админке создается MODx.form.Handler через Ext.reg('modx-form-handler',MODx.form.Handler);
Он функция. т.е. если мы там заменим строку на

Ext.reg('modx-form-handler',MODx.form.Handler);
console.log('typeof MODx.form.Handler: ', typeof MODx.form.Handler); // вернет ес-но typeof MODx.form.Handler: function

Но если мы тут воткнем

    ,submit: function(close) {
        console.log('typeof MODx.form.Handler: ', typeof MODx.form.Handler); // вернет объект!
// бла-бла-бла

То увидим, что у нас есть объект MODx.form.Handler с методом — функцией MODx.form.Handler.errorExt и другими полезными штуками. Вот когда функция стала объектом?
M
MisterN 21 июня 2016г в 19:43 #
Вот в админке создается MODx.form.Handler через Ext.reg('modx-form-handler',MODx.form.Handler);
вернее происходит ленивое создание объекта что-ли, или как это называется. Регистрирует xtype modx-form-handler. MODx.form.Handler — функция конструктора. Но она где-то превращается в объект и мы можем в любом месте вызвать хэндлер ошибки, например. Как это делается, хочу скопировать.
Fi1osof1
Fi1osof 21 июня 2016г в 19:53 #
1. Ext.reg('modx-form-handler',MODx.form.Handler) не создает никаких объектов, а только регистрирует класс-прототип для будущих объектов. Здесь я ну буду вдаваться в подробности, что в JS все есть объекты, дабы не запутывать совсем.
2. Объект создается тогда, когда он создается, а именно когда выполняется new ObjectClass(). При чем важно именно применение new, так как если ты выполнишь просто ObjectClass(), то будет простой вызов функции без вызова всяких дополнительных важных функций. А вот где именно этот вызов происходит — это уже другой вопрос. Много где может происходить.

В общем, это не какой-то частный вопрос, а вопрос понимания работы javascript. Советую как следует его подучить.
M
MisterN 21 июня 2016г в 20:03 #
Ну так понятно, что. Ext.reg не создает объекта. Тут ничего удивительного. Но если
console.log('typeof MODx.form.Handler: ', typeof MODx.form.Handler);
показывает, что у нас объект, значит где-то же он создается, правда? И я не мог найти где именно и как. Но я нашел, от здеся


Ext.onReady(function() {
    MODx.util.JSONReader = MODx.load({ xtype: 'modx-json-reader' });
    MODx.form.Handler = MODx.load({ xtype: 'modx-form-handler' });
    MODx.msg = MODx.load({ xtype: 'modx-msg' });
});


MODx.load собственно передает аргументы в Ext.ComponentMgr.create, как я и писал в заглавном посте.
Fi1osof1
Fi1osof 21 июня 2016г в 20:10 #
Ну вот, нашел. Теперь вся цепочка выстроилась?
M
MisterN 21 июня 2016г в 20:11 #
угу.
Fi1osof1
Fi1osof 21 июня 2016г в 20:12 #
Ну вот и здорово.
Авторизуйтесь или зарегистрируйтесь (можно через соцсети ), чтобы оставлять комментарии.