Как конвертировать старую версию LitElement в новую версию

Я разработал проект с использованием polymer (3.0.2) и lit-element (0.5.2).

Теперь я хочу преобразовать этот проект, чтобы использовать последнюю версию polymer (3.1.0) и lit-element (2.2.1).

Есть ли какой-нибудь сценарий или простой способ внести эти изменения вместо изменения синтаксиса в каждом файле?


person rajashekar    schedule 03.02.2020    source источник
comment
Насколько я знаю, скрипта для автоматизации этого процесса нет.   -  person Niklas    schedule 03.02.2020


Ответы (1)


Я тоже прошел через эту боль - сначала от Polymer HTML Imports, а затем от Polymer до LitElement.

Это немного сложнее, чем просто изменение синтаксиса, которое вы можете довольно легко сделать с помощью regex / grep и т.п., поскольку это фундаментальный сдвиг в подходе.

Полимер в значительной степени полагался на двусторонние привязки - вы помещаете <input value={{property}}>, и он автоматически обновляется. Это полагалось на то, что Polymer выполнял много работы, и было довольно хрупким - вы были очень ограничены в том, что вы могли бы построить на его основе.

LitElement отбрасывает их - вам нужно сделать <input value=${this.property} @change=${e => this.property = e.target.value}>, чтобы явно обрабатывать изменения. Это позволяет LitElement быть намного меньше, гораздо менее самоуверенным, гораздо более совместимым с другими библиотеками.

Кроме того, компоненты LitElement обычно более функциональны, чем компоненты Polymer. В Polymer у вас есть множество свойств / методов состояния, которые вы вызываете из шаблона, тогда как в LitElement эти свойства вызывают срабатывание метода render и являются отправной точкой для создания содержимого шаблона.

Таким образом, вы можете найти и заменить множество компонентов и односторонние привязки (например, с <input value=[[property]]> на <input value=${this.property}>), но все остальное необходимо адаптировать к более простому и функциональному подходу LitElement.

С другой стороны, они могут работать бок о бок, так что вы можете обновлять их один за другим, но вам придется делать это вручную.

person Keith    schedule 04.05.2021