Интересна реализация похожая на реализацию подключания 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 . Если кому то нужно используйте