Ext.define('App.widget.CustomButton', {
extend: 'Ext.Button',
alias: 'widget.App.widget.CustomButton' // а не 'App.widget.CustomButton'
})
Вместо того, чтобы превратить xtype в имя класса и согласовать его с механизмом динамической загрузки классов, сохранив возможность lazy instantiation, ребята из Sencha решили превратить xtype в шорткаты, разбитые с помощью префиксов на тематические группы: widget., proxy., reader. и т.д. Очень неудачное решение.
Тогда если надумаете продолжать серию заметок, то пишите их в такое время, когда для вас главное не только, чтоб работало, но и чтоб читатели сразу учились правильно использовать то, о чём вы пишете.
Зачем для данных используется grouping store, если для отображения используется обычный, а не grouping view? Почему вы явно создаёте view, а не используете опцию viewConfig?
Обучение других (и особенно новичков) дело такое… Тут надо хорошо разбираться в предмете.
невозможность в пятнашках переложить на свободное место любую фишку — это серьёзное усложнение :—)
template layout — это возможность, а не требование. не надо использовать его в ситуациях, для которых он не предназначен. откуда в приложении, использующем template layout, возможность вставки элемента между позициями layout'a?
разбивка на страницы — это представление.
изменяемость контента — это логика самого содержания, это семантика.
конкретные механизмы изменения контента — это поведение, зависящее от медиа-типа и устройства.
два одинаковых документа, в первом из которых некий фрагмент редактируем, а во втором — нет, — это разные документы. семантически разные.
редактируемость контента — совершенно семантическое свойство этого самого контента, поэтому contentEditable самое место в html. возможность таскать контент по странице — это аспект поведения приложения, поэтому draggable место не в html, а в js.
«Главная беда, повторяю, заключалась не в сумасшествии, а в том, что человеческий мозг был чересчур большим и непрактичным ввиду его склонности обманывать своих владельцев.»
…и прикрутите к нему Illuminations for Developers: www.illuminations-for-developers.com/
К сожалению, с xtype разработчики ExtJS либо перемудрили, либо недодумали. Чтобы такой код работал:
items: [{
xtype: 'button',
text: 'Standard Button'
}, {
xtype: 'App.widget.CustomButton',
text: 'Custom button'
}]
класс должен быть объявлен так:
Ext.define('App.widget.CustomButton', {
extend: 'Ext.Button',
alias: 'widget.App.widget.CustomButton' // а не 'App.widget.CustomButton'
})
Вместо того, чтобы превратить xtype в имя класса и согласовать его с механизмом динамической загрузки классов, сохранив возможность lazy instantiation, ребята из Sencha решили превратить xtype в шорткаты, разбитые с помощью префиксов на тематические группы: widget., proxy., reader. и т.д. Очень неудачное решение.
Зачем для данных используется grouping store, если для отображения используется обычный, а не grouping view? Почему вы явно создаёте view, а не используете опцию viewConfig?
Обучение других (и особенно новичков) дело такое… Тут надо хорошо разбираться в предмете.
скажите, в чём, на ваш взгляд, семантическая разница между span contentEditable=«true» и input? или между div contentEditable=«true» и textarea?
template layout — это возможность, а не требование. не надо использовать его в ситуациях, для которых он не предназначен. откуда в приложении, использующем template layout, возможность вставки элемента между позициями layout'a?
изменяемость контента — это логика самого содержания, это семантика.
конкретные механизмы изменения контента — это поведение, зависящее от медиа-типа и устройства.
два одинаковых документа, в первом из которых некий фрагмент редактируем, а во втором — нет, — это разные документы. семантически разные.
проезжая мимо станции, с меня слетела шляпа.
Курт Воннегут, «Галапагосы»
Версия: 10.51
Сборка: 3315
Платформа: Win32
Система: Windows XP