Как правильно переопределить модуль, если он не только без DOM-представления, но и вовсе сделан на "чистом" ym?
Предположим, хочу доопределить метод querystring.parse
из bem-components
. Пока решил так:
modules.define('querystring2', ['querystring', 'objects'], function(provide, querystring, objects) {
var querystring2 = objects.extend(null, querystring, /** @exports */ {
/**
* Дополняем станадртную ф-цию parse
* @param {string} str
* @returns {object}
*/
parse : function (str) {
// Удаляем символ '?' в начале строки
if ( typeof str === 'string' && str.indexOf('?') === 0 ) {
str = str.substr(1);
}
return querystring.parse(str);
},
});
provide(querystring2);
});
Есть ли более грамотный способ? Есть ли способ доопределить исходный модуль (декларировать под тем же именем)?
Смотрел:
(Не вижу тега ymodules
. Вроде был раньше?..)
Так ведь в этом плане никаких отличий нет: точно так же define под тем же именем.
Вот как раз пример с querystring в
bem-history
: https://github.com/bem/bem-history/blob/v4/common.blocks/uri/__querystring/uri__querystring.jsЯ первым делом упирался в циклические зависимости: у меня в deps был указан
querystring
и определял я тожеquerystring
. Это неправильно?Глядя на указанный пример, предполагаю, что не надо указывать расширяемый модуль в зависимостях расширяющего -- если он встретится где-то в deps'ах, то подтянутся оба: и библиотечный и расширяющий его, так?
да, все верно