2012-06-08 2 views
2

Было бы очень полезно, если бы я мог получить доступ к экземплярам моих представлений и контроллеров в моем приложении ext.js с консоли Chrome. Кто-нибудь знает, как это сделать?Как получить доступ к контроллерам extjs с консоли


CoffeeScript:

window.cms = Ext.create 'Ext.app.Application', 
    name: 'CMS' 
    controllers: [ 
    'MyController' 
    ... 

Казалось бы, что cms.getController('MyController') бы делать то, что я хочу, но я получаю конструктор назад вместо экземпляра я ищу.

+0

Wow я не видел никого писать Ext-JS wi th CoffeScript. Можете ли вы разместить изображение того, как выглядит консольный вывод? Расширение нескольких свойств объекта? –

+0

Просто не используйте эти 'getController' в своем действительном коде. Он обеспечивает жестко связанный код. Для отладки это нормально. Многие люди это делают, но они не заботятся о повторном использовании и тестируемости) –

+0

Я не могу выдержать синтаксис CoffeScript (каждый из них) ... где фигурные скобки? Люди говорят, что скобки для компьютеров, я думаю, что я компьютер :) Кроме того, у вас должно быть чертовски сложно отладить ваш код. –

ответ

1

Я не думаю, что вы получаете конструктор, это просто, что хром показывает конструктор при вызове console.log на Ан-Ext JS объект

+0

Ах, ладно спасибо. Тем не менее, у него нет методов, которые я определил в MyController. Любая идея, что происходит? –

+0

Вы пробовали 'console.log (cms.getController ('MyController'). MethodName)'? –

+0

КОРРЕКЦИЯ: у нее есть методы ... Хром просто не перечислял их или автозаполнение для меня. Бонусные баллы, если вы можете объяснить этот бит. Но большое спасибо. –

5

Вам нужно создать ссылку на экземпляр приложения в приложении. Как это:

Ext.application({ 
    name: 'CMS', 
    controllers: ['MyController'], 
    launch:function() { 
    CMS.app = this; 
    ... 
    } 
}); 

, то вы можете использовать

CMS.app.getController ('MyController') ...

+0

Неверно, что OP необходимо изменить свой код. Также не отвечает на вопрос. Код OP работает нормально. Кстати, он использует CoffeScript, а не JS. И фактически Ext-JS уже устанавливает переменную 'CMS', когда вы вызываете' Ext.application', давая ей имя '' CMS'' –

+0

Я вижу вашу точку зрения, однако я думаю, что разница заключается в использовании Ext.create vs Ext.application. Первый должен создать экземпляр, а второй - создать определение класса. Я могу подтвердить второй сценарий и код, который я опубликовал, потому что я столкнулся с подобной проблемой. – dbrin

+0

'Ext.application' - это просто оболочка, которая вызывает' new Ext.app.Application (config); 'которая совпадает с вызовом' Ext.create ('Ext.app.Application', config) ', предполагая, что ваши зависимости уже загружен. 'Ext.define' - это тот, который создает определения классов. –

2

Вы можете использовать:

CMS.getApplication().controllers.get('ControllerName')

то получит фактический экземпляр контроллера

Смежные вопросы