Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

i-bem: поправлен getMods() #1379

Merged
merged 1 commit into from
Jun 29, 2016
Merged

Conversation

smdenis
Copy link

@smdenis smdenis commented Jun 23, 2016

По мотивам bem/bem-bl#591.
/cc @dfilatov @narqo

@dfilatov
Copy link
Member

dfilatov commented Jun 23, 2016

Если посмотреть на окружающий метод getMods, то получается хрень: сначала _extractMods читает из _modCache, а потом _getMods пишет этот результат обратно в _modCache.

@smdenis
Copy link
Author

smdenis commented Jun 23, 2016

Дело в том, что сейчас для без-DOM-ных элементов getMods() возвращает {} и потом им же затирает _modCache. Получается, после вызова getMods() не работают getMod(), hasMod().

@dfilatov
Copy link
Member

у _extractMods есть и второй параметр elem. Сейчас если кто-то передаст его, то получит модификаторы самого блока.

@smdenis
Copy link
Author

smdenis commented Jun 23, 2016

Да, потому что у блоков без DOM-представления и нет элементов.

@dfilatov
Copy link
Member

Как мне кажется, что лучше провести более глубокий рефакторинг здесь:

  • удалить метод _extractMods в i-bem
  • в getMods в i-bem брать значения из _modCache.
  • переопределить getMods в i-bem__dom и там уже вызывать _extractMods.

@smdenis
Copy link
Author

smdenis commented Jun 23, 2016

Кажется, что если переопределить getMods() в i-bem__dom, то тогда потеряется кэш, так?

@dfilatov
Copy link
Member

Кажется, что если переопределить getMods() в i-bem__dom, то тогда потеряется кэш, так?

Ну так надо сделать так, чтобы не терялся )

@smdenis
Copy link
Author

smdenis commented Jun 24, 2016

@dfilatov Поправил.

* @param {Object} mods Modifiers values
* @returns {BEM}
*/
setCache: function(modNames, mods) {
Copy link
Member

@dfilatov dfilatov Jun 24, 2016

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Почему он публичный-то? @Protected мы начинаем также с _

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

И зачем вообще отдельный метод, вроде можно заинлайнить это по месту.

@smdenis smdenis force-pushed the smdenis.getmods.fix branch 2 times, most recently from 1cadb68 to 0f70840 Compare June 24, 2016 14:17
@smdenis
Copy link
Author

smdenis commented Jun 24, 2016

@dfilatov Спасибо! Поправил :)

modCache = this._modCache,
modNames = [].slice.call(arguments, hasElem ? 1 : 0);

return !modNames.length ?
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Странно что ругается хук, но у нас по cs "?" прибивается, должно быть return !modNames.length?, поправь, пожалуйста, везде.

@smdenis smdenis force-pushed the smdenis.getmods.fix branch 3 times, most recently from 3f51947 to 734e79d Compare June 24, 2016 15:26
@smdenis
Copy link
Author

smdenis commented Jun 24, 2016

Поправил.

@deeonis
Copy link

deeonis commented Jun 28, 2016

@dfilatov нужен твой ок, сможешь посмотреть?

@narqo
Copy link
Member

narqo commented Jun 28, 2016

Тесты не проходят же:

  • ошибки code-style
  • мы используем should в тестах, а не expect.

@smdenis smdenis force-pushed the smdenis.getmods.fix branch 5 times, most recently from 3b58f29 to d0d553c Compare June 29, 2016 09:56
@coveralls
Copy link

Coverage Status

Coverage increased (+0.1%) to 56.668% when pulling d0d553c on creedencewright:smdenis.getmods.fix into 04c64ef on bem:v3.

@smdenis
Copy link
Author

smdenis commented Jun 29, 2016

@narqo Поправил )

@@ -114,7 +114,18 @@ describe('i-bem', function() {
delete BEM.blocks['block'];
});

describe('getMods', function() {
it('should return specified mods', function() {
block.getMods('mod1', 'mod2', 'mod3').should.be.deep.equal({ mod1 : 'val1', mod2 : true, mod3 : false });
Copy link
Member

@dfilatov dfilatov Jun 29, 2016

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should.be.deep.equal -> should.be.eql
По крайней мере, мы используем везде вторую версию.

@coveralls
Copy link

Coverage Status

Coverage increased (+0.1%) to 56.668% when pulling 81f3b0d on creedencewright:smdenis.getmods.fix into 04c64ef on bem:v3.

@smdenis
Copy link
Author

smdenis commented Jun 29, 2016

Поправил.

@dfilatov
Copy link
Member

У меня больше нет вопросов.

@smdenis
Copy link
Author

smdenis commented Jun 29, 2016

@narqo есть ещё какие-то замечания?

@narqo
Copy link
Member

narqo commented Jun 29, 2016

@dfilatov это в v4 нужно?

@dfilatov
Copy link
Member

dfilatov commented Jun 29, 2016

@narqo там же нет getMods()!

@narqo narqo merged commit 6609b0a into bem:v3 Jun 29, 2016
@smdenis smdenis deleted the smdenis.getmods.fix branch June 29, 2016 15:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

5 participants