Замена Ext.reg() (xtype) в ExtJS4?
Я хочу использовать MultiSelect от 3.3 в Ext JS 4, как описано в этом предыдущем вопросе:
Почему файлы селектора элементов Ext JS multiselect не включены в загрузку Ext JS 3.3 и где они?
Кажется, что способ зарегистрировать xtypes изменился в Ext JS 4. Когда я пытаюсь импортировать этот виджет вместе с ItemSelector.js, я получаю сообщение об ошибке на Ext.reg().
Ext.reg('multiselect', Ext.ux.form.MultiSelect);
//backwards compat
Ext.ux.Multiselect = Ext.ux.form.MultiSelect;
Как изменить wdigets, чтобы заставить их работать в Ext JS 4?
Ответы
Ответ 1
Внешний способ JS 4 - использовать новую систему классов для создания вашего виджета:
http://www.sencha.com/blog/countdown-to-ext-js-4-dynamic-loading-and-new-class-system/
Убедитесь, что ваш виджет присвоил псевдоним, используя пространство имен "widget". Например:
Ext.define('Ext.ux.form.MultiSelect', {
extend: 'ClassNameYouAreExtending',
alias: 'widget.multiselect'
});
Затем вы можете обратиться к виджету с помощью "multiselect" xtype. Когда вы используете xtype в Ext JS 4, он ищет класс с псевдонимом "widget. [Xtype]".
Ответ 2
Вам нужно будет изменить код, чтобы получить компонент MultiSelect, работающий на ExtJS 4. Вот несколько изменений, которые вам нужно будет сделать:
-
Определение класса. ExtJS 3.x используется Ext.extend для расширения. В новой версии вам придется использовать Ext.define
-
В новой версии вы можете представить имя класса как строку. Из-за этого, я думаю, вам больше не понадобится метод Ext.reg. Класс Component Manager не имеет функции регистрации.
Ответ 3
Ну, вы ныряете в зону предварительной беты, поэтому в какой-то степени вам придется смотреть на код и понимать его. В разделе сообщения в блоге есть некоторое объяснение новой системы классов, и там будет исчерпывающее руководство по миграции до того, как выйдет 4,0 финала. Я бы определенно преследовал это на форумах Sencha 4.0, но с тех пор, когда все эксперты Ext 4 будут болтаться.