Это недостаток ES-модулей, и именно поэтому Google так долго настаивал на импорте HTML, несмотря на то, что другие поставщики браузеров мертвы против них.
Вы можете отделить свои CSS и JS, но выдобавление дополнительных туров в браузер, если вы получаете их во время выполнения.В частности, ваши шаблоны извлекаются асинхронно, если вы будете ждать их, вы будете блокировать основной поток JS, а если вы их await
, то вы прервете lit-element
, поскольку он ожидает, что корневой шаблон будет синхронным.
Вы могли бы (но не должны) использовать until
:
import { until } from 'lit-html/directives/until';
...
render(){
return html`until(
this.loadTemplate(
'/src/Components/ExampleElements/test-animated-button-element.html',
this.foo,
this.bar), html`Loading...`)`;
}
async loadTemplate(path, ...parts) {
// You're using templates you can use fetch, instead of XMLHttpRequest
const r = await fetch(path, { method: 'GET', credentials: 'same-origin' });
if(r.ok)
return html(await r.text(), parts);
return html`Not Found: ${path}`
}
Однако я заметил, что вы используете голые модули (т.е. без .
в начале и .js
в конце), поэтому вы не можете отправить этот файл напрямую в браузеры (ни один из них еще не может обрабатывать голые модули).Вкратце: у вас должно быть что-то, что превращается:
import { LitElement, html} from '@polymer/lit-element';
В:
import { LitElement, html } from '../../node_modules/@polymer/lit-element/lit-element.js';
Или объединяет их в один файл.Если вы делаете это, то почему бы не заставить ваш упаковщик (Webpack, RollupJS, Browserify и т. Д.) Импортировать ваши CSS и HTML в файл в время сборки ?
Наконец, с любым из этихРешения, которые вы теряете при написании частей <-> html, что не имеет значения для CSS, но усложнит разработку и поддержку HTML-частей.С такой библиотекой, как lit, вы хотите вашего HTML в своем JS по тем же причинам, по которым JSX / React / Preact работает так хорошо.Если ваши файлы слишком велики, то я не думаю, что решение состоит в том, чтобы разделить их с помощью JS / CSS / HTML, а вместо этого разделить их на несколько компонентов.
Так, например, предположим, у вас есть огромный <product-detail>
control ...
Не
- product-detail.js
- product-detail.html
- product-detail.css
Do
- product-detail.js
- product-detail-sizes.js
- product-detail-specs.js
- product-detail-parts.js
- product-detail-preview.js
- и т. Д.
Разбейте каждый компонент, чтобы выполнить определенную задачу.Весь смысл lit-element
состоит в том, чтобы сделать все это как можно более простым для создания, и вам нужно множество небольших автономных компонентов.