Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   requires vs uses (https://javascript.ru/forum/extjs/60120-requires-vs-uses.html)

khusamov 11.12.2015 23:19

requires vs uses
 
http://docs.sencha.com/extjs/6.0/6.0...s-cfg-requires

Инструкция requires гарантирует загрузку, перечисленных в ней классов до инстанцирования (наверное до создания экземпляров) данного класса.

http://docs.sencha.com/extjs/6.0/6.0...Class-cfg-uses

Инструкция uses гарантирует загрузку, перечисленных в ней классов до вызова обработчиков Ext.onReady.

Отсюда я делаю вывод, что requires нужно использовать, если создаются экземпляры этого класса до Ext.onReady, что происходит весьма редко. Мало того, с использованием Sencha Cmd этот случай вообще исключен из жизни.

Таким образом, надо всегда и везде использовать uses*. И только когда нужен экземпляр класса до Ext.onReady, то нужно использовать requires.

Почему тогда всюду используется requires?

И в коде самого ExtJS и в пользовательском коде.

_____
* А то может возникнуть предупреждение "Duplicate class name 'Ext.ux.AppInspector' specified, must be a non-empty string", которое крайне сложно исправить.

nohuhu 12.12.2015 00:05

Цитата:

Сообщение от khusamov (Сообщение 399679)
Инструкция requires гарантирует загрузку, перечисленных в ней классов до инстанцирования (наверное до создания экземпляров) данного класса.

Вот тут ошибка: requires гарантирует загрузку перечисленных зависимостей до *создания* данного класса. Т.е. сам класс не определён до тех пор, пока все зависимости не созданы.

Цитата:

Инструкция uses гарантирует загрузку, перечисленных в ней классов до вызова обработчиков Ext.onReady.
Это верно.

Цитата:

Почему тогда всюду используется requires?

И в коде самого ExtJS и в пользовательском коде.
Потому что uses фактически нужно только для того, чтобы разрывать круговые зависимости: если Foo нужен Bar, а Bar в свою очередь хочет Foo, то мы не можем включить их в requires с обеих сторон, загрузчик обидится. В таком случае Foo может включать Bar в requires, а Bar включает Foo в uses, и все довольны.

khusamov 12.12.2015 01:16

тогда примеры в документации вводят в заблуждение

nohuhu 12.12.2015 02:15

Запросто и могут, это сложная тема для объяснения. Если подскажете, какие именно примеры вам показались неясными, то мы поправим. :)

Документация не бывает хорошей, только адекватной... Иногда... :)

khusamov 12.12.2015 19:52

Ссылки на примеры я уже давал, вот они:
http://docs.sencha.com/extjs/6.0/6.0...s-cfg-requires
http://docs.sencha.com/extjs/6.0/6.0...Class-cfg-uses


Часовой пояс GMT +3, время: 13:32.