Понимаю, что заголовок не информативен, но не могу придумать ничего короткого и конкретного. Наверно это где-то описывалось, но я и ключевые слова не могу выдумать, чтобы искать.
Подскажите, вот в админке допустим стандартно запускается.
Вот допустим создается функция MODx.form.Handler
Вот она расширена через Ext.extend и передается в Ext.reg. Это все еще же функция, используемая в качестве конструктора.
Но вот мы видим, что почему-то мы обращамеся к объекту MODx.form.Handler.errorExt(a.result,frm) так, будто где-то вызвано
MODx.form.Handler = Ext.ComponentMgr.create({xtype: "test-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, как и писал выше.
В php многое из этого бы наверно делалось бы статичными методами, но не смотрел подробно эти объекты, не уверен…
Вообще ничего не ясно ни из заголовка, ни из топика. Выкладывай свои коды, описывай задачи, чем ты не доволен и там уже будем посмотреть. А так гадание какое-то получается.
Вот в админке создается 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 и другими полезными штуками. Вот когда функция стала объектом?
Вот в админке создается MODx.form.Handler через Ext.reg('modx-form-handler',MODx.form.Handler);
вернее происходит ленивое создание объекта что-ли, или как это называется. Регистрирует xtype modx-form-handler. MODx.form.Handler — функция конструктора. Но она где-то превращается в объект и мы можем в любом месте вызвать хэндлер ошибки, например. Как это делается, хочу скопировать.
1. Ext.reg('modx-form-handler',MODx.form.Handler) не создает никаких объектов, а только регистрирует класс-прототип для будущих объектов. Здесь я ну буду вдаваться в подробности, что в JS все есть объекты, дабы не запутывать совсем.
2. Объект создается тогда, когда он создается, а именно когда выполняется new ObjectClass(). При чем важно именно применение new, так как если ты выполнишь просто ObjectClass(), то будет простой вызов функции без вызова всяких дополнительных важных функций. А вот где именно этот вызов происходит — это уже другой вопрос. Много где может происходить.
В общем, это не какой-то частный вопрос, а вопрос понимания работы javascript. Советую как следует его подучить.
Ну так понятно, что. 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, как я и писал в заглавном посте.
Ну вот, нашел. Теперь вся цепочка выстроилась?
Ну вот и здорово.