RU
lilliputten
lilliputten
22 March 2017

Как правильно переопределить модуль, если он не только без 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. Вроде был раньше?..)

tadatuta
#tadatuta
22 March 2017

Так ведь в этом плане никаких отличий нет: точно так же define под тем же именем.

Вот как раз пример с querystring в bem-history: https://github.com/bem/bem-history/blob/v4/common.blocks/uri/__querystring/uri__querystring.js

lilliputten
#lilliputten
23 March 2017

Я первым делом упирался в циклические зависимости: у меня в deps был указан querystring и определял я тоже querystring. Это неправильно?

Глядя на указанный пример, предполагаю, что не надо указывать расширяемый модуль в зависимостях расширяющего -- если он встретится где-то в deps'ах, то подтянутся оба: и библиотечный и расширяющий его, так?

tadatuta
#tadatuta
23 March 2017

да, все верно