В документации описано достаточно про методы. Но как доходит до статических, то как-то вот так.
Можно более подробно узнать их назначении? Допустим я делаю поиск блока
this.__smaller = this.findBlockInside('smaller')
Как теперь обращаться и к каким методам? Если посмотреть информацию в консоли
console.log(this.__smaller)
то будет видно, что стандартные методы из декларации доступны в объекте
__proto__
и к ним можно обращаться просто
this.__smaller.goodJump()
В связи с данной ситуацией у меня появились большие сомнения о том, что понял назначение статистических методов. Только что-то далёкое, но не осознанное.
@belozyorcev Статические методы можно воспринимать как методы класса. Они не зависят от каждого конкретного экземпляра блока.
Например, для любого блока b1 можно определить метод
getName(), который будет возвращать имя блока. Оно всегда будет одно и то же, не зависимо от того, какой из блоковb1мы спросим. Или какой-нибудьgetTwoPlusTwo()— он всегда возвращает4.При этом для методов получения или изменения свойств конкретного блока статические методы не подойдут: если мы хотим получить координаты
b1, то очевидно, что для разных экземпляровb1они могут отличаться. Или, скажем, мы хотим задать значениеinput— нам нужно мочь в поле login задать одно, а в password — другое.Зачем это нужно.
BEMDOM.blocks.b1.myStaticMethod().Ответил ли я на вопрос?
@tadatuta вроде как. Стало понятней, но ещё сидит недоосознанность внутри меня.
Т.е. вызов статистического метода влияет на все экземпляры блока? Если я сделаю
BEMDOM.blocks.b1.hideBlock(), то все блокиb1скроются?Если ты вызовешь
BEMDOM.blocks.b1.hideBlock(), то выполнится то, что написано в кодеhideBlocks();)Чтобы такой метод умел спрятать все блоки, ему придется как-то узнать о них о всех. Это можно реализовать, например, добавляя каждый новый блок в какой-нибудь
this.__self.storageпри инициализации. Тогда можно будет вhideBlocks()вызватьthis.storage.forEach(function(block) { block.hide(); });Я имел ввиду что-то типо этого. Что сделает вызов
BEMDOM.blocks.b1.hideBlock()при такой декларации?скажет
undefined is not a function;)Как можно их поженить:
а чтобы обратиться из динамических к статическим?
Разве? Простые ("динамические") методы не должны копироваться для каждого блока, они ведь в прототипе. А вместо
BEMDOM.blocks.b1.myStaticMethod(), мне кажется, лучше по-честному добавлять b1 в зависимости.@belozyorcev
да, верно.
@apsavin да, по первому пункту ты, похоже, прав. а про добавление в зависимости вместо
BEMDOM.blocks.b1.myStaticMethod()я не понял.@tadatuta @apsavin наверное имел ввиду
modules.define('scroller', ['i-bem__dom', 'b1'], function(provide, BEMDOM, b1) {} )Да.
@belozyorcev @apsavin да, согласен.