Вам что здесь, mhu-dom намазано, что ли?)
Приложение создаётся методом Mhu.create()
. Можно создать сразу несколько в разных хостах. Мало ли чего.
Создаёт компонент внутри указаного хоста. Поскольку Mhu наследуется от mNode, синтаксис схож
component
- Строка с имененм тэга, либо функция-конструктор компонента (унаследованного отmNode
)host
- Либо строка, тогда цель ищется черезdocument.querySelector
, либо объект, но тогда это должен быть HTMLElement (или нет, хз, что будет)
Пример:
import { Mhu } from 'DOM'
import App from './App'
const inst = Mhu.create(
App,
'body'
)
или
import { Mhu } from 'DOM'
const inst = Mhu.create(
'button,
'body'
)
Нет такого, конечно, пока Mhu создаётся в дев-режиме вне зависимости от режима и засовывает ссылку на себя в окно
То есть, можно поглазеть на VM, набрав в консоли Mhu
Обёртка для HTMLElement, реализует ряд полезных функций. Такой jQuery на минималках.
Все методы Synth
возвращают изменённый объект, то есть их можно чейнить.
Создаёт обёртку вокруг указанного узла
Вешает на узел обработчик через addEventListener
Навешивает на узел классы из списка list
, предварительно отфильтровывая falsy элементы. То есть, да, можно делать .cn([this.visible && 'visible'])
. Если флаг clean
установлен в true
, предварительно очистит все классы, которые уже навешаны.
Навешивает на узел аттрибуты.
Создаёт дочерний узел по указанному тэгу. Если указана ещё и NS, то создаст узел через document.createElementNS(NS, tag)
(для всяких там SVG).
Если удалось создать узел, добавит его потомком к текущему и вернёт Synth
-обёртку для созданного узла. Единственное исключение.
Устанавливает id
узла.
Устанавливает textContent
узла.
Сносит innerHTML
узла.
Геттер. Возвращает HTMLElement, вокруг которого обёрнут Synth
(если уж совсем неймётся).
Базовый компонет, реализует базовый функционал компонента. Я, вообще, за разумное сочетание композиции и наследования. Что считать разумным, пусть каждый решает для себя сам.
Хуёв и полон лишений. Основные методы жизненного цикла:
Компонент создали, навесили на него хост, подсадили в потомки родителю, но ещё не создали ему элемент. Хорошо бы начать его со строк this.$is(tag)
, чтобы обзавестись собственным узлом в DOM, но это не обязательно... Наверное =/
Сверху (или внутри {или сбоку}) случилось что-то, что изменило пропсы компонента. Соответственно, был вызван этот метод, чтобы компонент отреагировал на новые пропсы.
Компонент попросили убиться. Делать ничего не нужно, но время для последнего слова есть. Можно отменить подписки, например.
Концепция компонентов предсполагает, что каждый из них самостоятелен, самодостаточен и сам подтирает свою жопу. Никакой халявы, никакой реконсиляции. А теперь, ебитес.
А теперь давайте о том, что они умеют по базе.
Создаёт узлу HTMLElement
. Важно, если у родителя не было создано узла, всё грохнется. Потомками виртуальных компонентов могут быть только виртуальные компоненты. Считайте это "семейным проклятьем" (не знаю, зачем оно вам надо).
Список всех узлов потомков. Мало ли, пригодится.
Возвращает Synth
для узла этого компонета. То есть, в create
можно заявить, что этот узел this.$is('button')
и тут же через .$el
навесить ему .on('click', this.onClick.bind(this))
или другое что-то.
Вешает обработчик на сигнал от дочернего узла.
ВАЖНО! Не путать с
this.$el.on
- события элемента ловиться не будут, будут ловиться только эмиты дочек.
ВАЖНО! Если узел не принимает событие дочки, то оно уйдёт родителю узла.
Явно указывает, что событие нас не интересовает, поэтому оно сразу будет уходить родителю. То есть, если повесить событие на $on
и на $skip
, то $skip
будет иметь больший приоритет.
Отправить родителю событие, которое он должен поймать, или не поймать, или пропустить.
Создаёт дочерний узел. Если вообще ничего не указывать, то получится mNode
с узлом типа div
. Но можно указать любой другой тег. Или передать функцию-конструктор компонента. И пропсы ему передать можно, начальные.
Сносит весь внутренний ХТМЛ узла и всех потомков($ch
), возвращает девственно чистый узел.
Пожалуйста, не нужно трогать и/или переопределять этот метод. Он отвечает за маршрутизацию событий. Если вы его перекрыли, не нойте как побитые сучки, вас предупреждали.
Да, однажды здесь будет охуенный (нет) history-роутер.