Например, в такой наивной реализации свойства могут быть только строковыми.
Строковые, потому что вы setAttribute используете, что необязательно. А так, у классов веб-компонент возможности такие же, как и у обычных js-классов. Вот пример когда свойство - объект. Специально добавил connectedCallback, чтобы отобразить его в виде текстовой ноды.
class MyFoo extends HTMLElement {
connectedCallback() {
this.textContent = this.bar.foo;
}
bar = { foo: 1337 };
}
globalThis.customElements.define("my-foo", MyFoo);
const element = new MyFoo();
console.log(element.bar.foo);
// 1337
Если взять Хабр, то рандомный автор публикуется редко, но по своей совокупности материалы таких авторов создают разнообразный контент на протяжении длительного периода времени. И самое главное, что эти публикации попадают в общую ленту.
Взять любой канал в телеге, если это не юмор, не новости, то читаешь узкоспециализированную инфу. Рано или поздно наступает перенасыщение. И канал автора становится неинтересен. Аналог ленты в телеге - это папки, которые состоят из тех каналов, которые пробились через информационный шум. И в этой папке-ленте нет места для новых рандомных каналов, я о них никогда не узнаю. Да и папка с подборкой каналов также с течением времени становится неинтересной. Не хватает рекомендаций рандомного канала.
В Яндекс.Такси можно было бы завести семейные учётные записи, чтобы получать информацию об истории передвижения связанных аккаунтов. С возможностью не делиться информацией по конкретным поездкам.
Я думаю, что внутреннюю проверку по линии безопасности они сразу провели, увидели, что проблемы нет: довезли, высадили. И с водителем поговорили. Поэтому их поведение мне полностью понятно. В том числе нежелание предоставить информацию о передвижении клиентов посторонним.
А супруге можно было бы подарить смарт часы или фитнес браслет, чтобы при звонке вибрировал на руке, когда телефон лежит в сумке.
Скажите, а рассматривали ли вы возможность технической защиты программного кода? Не посещала ли мысль, что кто-то один купит лицензию, а потом по рукам распространит версию Про со всеми наворотами?
Веб-компоненты - это просто кастомные DOM-элементы, поэтому и жизненный цикл начинается с connectedCallback.
В веб компонентах логика отображения смешивается с обычной логикой работы
Вот как раз наоборот, веб-компоненты заточены только под отображение и взаимодействие с пользователем через шину событий. Логика, как и при работе с классическими элементами, обычно выносится отдельно.
Там только строки, в атрибутах, нет типизация получается, вот это и плохо
Если работать только через атрибуты, то, конечно, будут строки. И это потому что разметка страницы - это текст. Если же идет речь о том, как передать объект компоненту для его обработки, то пропишите соответствующий метод или свойство в классе веб-компонента, и вызывайте потом в коде.
adoptedStyleSheets - Есть решение лучше, чем писать стили в js
adoptedStyleSheets используется для подключения текстового содержимого в качестве css-таблицы в тень элемента. Причем это делается в connectedCallback. Само же содержимое стиля может быть вынесено в отдельный esm-модуль. Так что смешения тут никакого нет. Да и логика существования самого веб-компонента не нарушена. Потому что веб-компонент - это все-таки про вьюху.
Согласен, что плодить новые сущности в виде кастомных компонентов надо тогда, когда можно существенно упростить разметку. Джаваскриптовое поведение можно и через is аккуратно подключить, оставляя понятные всем теги.
Не знаю почему вас удивил низкоуровневый код на js. Это база.
Реактивность может быть реализована с помощью внешних библиотек, например, mobx.
Код под спойлером
Спасибо за публикацию! Полезно.
Добавлю.
Строковые, потому что вы setAttribute используете, что необязательно. А так, у классов веб-компонент возможности такие же, как и у обычных js-классов. Вот пример когда свойство - объект. Специально добавил connectedCallback, чтобы отобразить его в виде текстовой ноды.
Бекапы потом локально хранятся или тоже отправляются в разные облака?
Целый ИИ нужен, чтобы понять, что архив бэкапов затирается.
Таких менеджеров паролей нет что ли?
Абсолютно согласен. Конфиденциальность как-то не бьётся с реалтаймовым p2p и отсутствием верификации (читай как риск mim).
Вообще, было бы интересно почитать о безопасности stun и turn серверов. Без них никакого p2p нет.
Если взять Хабр, то рандомный автор публикуется редко, но по своей совокупности материалы таких авторов создают разнообразный контент на протяжении длительного периода времени. И самое главное, что эти публикации попадают в общую ленту.
Взять любой канал в телеге, если это не юмор, не новости, то читаешь узкоспециализированную инфу. Рано или поздно наступает перенасыщение. И канал автора становится неинтересен. Аналог ленты в телеге - это папки, которые состоят из тех каналов, которые пробились через информационный шум. И в этой папке-ленте нет места для новых рандомных каналов, я о них никогда не узнаю. Да и папка с подборкой каналов также с течением времени становится неинтересной. Не хватает рекомендаций рандомного канала.
Пиринговый webrtc существенно помогает в решении проблемы нехватки ресурсов.
Прикольно. Нейронка локальная или расшифровка через облако? В опенсорсе есть она? Интересно было бы посмотреть ее.
Постгрес выбирают, потому что в некоторых организациях требуют использовать ПО из реестра. Плюс официальная техподдержка.
В Яндекс.Такси можно было бы завести семейные учётные записи, чтобы получать информацию об истории передвижения связанных аккаунтов. С возможностью не делиться информацией по конкретным поездкам.
Я думаю, что внутреннюю проверку по линии безопасности они сразу провели, увидели, что проблемы нет: довезли, высадили. И с водителем поговорили. Поэтому их поведение мне полностью понятно. В том числе нежелание предоставить информацию о передвижении клиентов посторонним.
А супруге можно было бы подарить смарт часы или фитнес браслет, чтобы при звонке вибрировал на руке, когда телефон лежит в сумке.
Все круто! Спасибо, что делитесь. Нет ли проблемы рассинхрона видео и аудио потоков?
Согласен. А еще спасает мысль о том, что в чужом коде программистам будет тяжело разобраться, проще обратиться к разработчику напрямую.
Сейчас, на всякий, рассматриваем KPHP (разработка VK) - он позволяет компилировать php-код в бинарник.
Очень классно написали. Спасибо.
Скажите, а рассматривали ли вы возможность технической защиты программного кода? Не посещала ли мысль, что кто-то один купит лицензию, а потом по рукам распространит версию Про со всеми наворотами?
Веб-компоненты - это просто кастомные DOM-элементы, поэтому и жизненный цикл начинается с connectedCallback.
Вот как раз наоборот, веб-компоненты заточены только под отображение и взаимодействие с пользователем через шину событий. Логика, как и при работе с классическими элементами, обычно выносится отдельно.
Если работать только через атрибуты, то, конечно, будут строки. И это потому что разметка страницы - это текст. Если же идет речь о том, как передать объект компоненту для его обработки, то пропишите соответствующий метод или свойство в классе веб-компонента, и вызывайте потом в коде.
adoptedStyleSheets используется для подключения текстового содержимого в качестве css-таблицы в тень элемента. Причем это делается в connectedCallback. Само же содержимое стиля может быть вынесено в отдельный esm-модуль. Так что смешения тут никакого нет. Да и логика существования самого веб-компонента не нарушена. Потому что веб-компонент - это все-таки про вьюху.
+1. Действительно! Я-то думал, что будущее уже наступило и все давно поддерживается) Вот оно что. Тогда только кастомное имя остаётся.
https://caniuse.com/mdn-html_global_attributes_is
Спасибо, что делитесь опытом, интересная работа.
Кстати, а почему всё-таки от ваниллы отказались? С какими сложностями столкнулись?
Согласен, что плодить новые сущности в виде кастомных компонентов надо тогда, когда можно существенно упростить разметку. Джаваскриптовое поведение можно и через is аккуратно подключить, оставляя понятные всем теги.