Интересна реализация похожая на реализацию подключания jquery. Сам пробовал сделать на подобии, но ничего не вышло. Прошу помощи
Интересна реализация похожая на реализацию подключания jquery. Сам пробовал сделать на подобии, но ничего не вышло. Прошу помощи
в условиях бэм блока делаю так: все состовляющие раскидал на элементы и прописал каждому deps(на основе фильтра на странице закачек), core положил в сам блок. В самих файлах борщиком подтягиваю исходники из bower_components.
Ну борщиком подтягивать файлы не всгде хочется. Было бы удобно то что есть на CDN подтянуть оттуда
Сделал как то так, но кажется что это не лучшее решение :)
@voischev в целом решение совпадает с https://github.com/bem/bem-core/blob/v2/common.blocks/jquery/jquery.js
только если в jQuery UI нет понятия
.noConflict, то можно не делать все эти лишниеdoProvide(preserveGlobal)(сейчас у тебя вообщеprovide(preserveGlobal? $.ui : $.ui)этот параметр никак не используется)как-то вот так:
@veged просто jquery-ui если он подключен к сайту можно использовать в из $
а в с таким кодом мне приходится дергать модуль что бы loader отработал, например так
И уже в самом коде я могу пользоваться 'ui' методами из 'jquery'
Вот по этому и кажется что работает не совсем правильно. Было бы горазло красиивее подключать 'ui' где нибудь в зависимостях для блока 'page' и он становился доступен из '$' в '.js'
@voischev не согласен, что это "красиво" использовать
uiиз$(фактически глобальный скоуп) и гарантировать это как-то неявно — способ когда естьmodules.define('sortable', ['i-bem__dom', 'jquery-ui'], function(provide, BEMDOM, ui)явная декларация, что нуженuiи последующее его использование из такой переменной из какой хочется выглядит красивееодной из главных идей использования модульной системы как раз было, что можно будет не использовать
$как хранилище модулей, а подключать модули явно и на прямую@veged с идеей согласен. Но как поступать с таким кодом? Когда метод вызывается из
$объекта?@voischev такой код должен быть обёрнут в
modules.define('...', ['i-bem__dom', 'jquery'], function(provide, BEMDOM, $) { ... }@veged да конечно. Я имел ввиду что в глобальном
$при подключенномuiвheadбудут доступны методыuiиз модуля$Пример в этой строкеИ как тогда обратиться к этому методу в случае когда у нас подключается
uiмодуль@voischev Если код красиво переписать не получается, то может быть подключать
jquery-uiвместе сjquery? В самих блоках jquery и ui переписатьprovide, чтобы происходило подключение сразу обоих модулей, но провайдился только запрашиваемый?Ты же согласен с тем, что
domElem.sortableэто очень неявное использованиеjquery-ui(или откуда там этотsortable?) ?@zxqfox абсолютно согласен. Хотелось бы еще мнений и возможно решений :)
про
_this.domElem.sortableя упустил из вида, что это из jQuery UI приезжает :-/ ну тогда надо оборачивать вmodules.define('...', ['i-bem__dom', 'jquery', 'jquery__ui'], function(provide, BEMDOM, $, ui) { ... }и использовать.sortableзная, что он будет, если спровайдилсяjquery__ui@zxqfox вариант с переписыванием про подключение обоих модулей я не понял — в предлагаемом способе и так будет подключение обоих библиотек
@veged вот так больше нравится! :+1: Спасибо за совет
@veged нуу... очень грубо, так:
@veged А
loaderне умеет же ссылки из массива загружать?@voischev лучше, конечно,
jqueryопределить как зависимостьjquery-ui, и подключать только его, но этот глобальный скоупjqueryздесь совершенно всю красоту портит.https://github.com/factorymn/bem-factory/commit/753e622c17518e51c797420f0deb105be0cf2cb9 Положил к нам в библиотеку последний вариант от @veged . Если кому то нужно используйте