У меня похожая ситуация, я программирую бизнес-логику, а моя дочь программирует HTML и CSS. Итак, вдохновленный hyperstream, и поскольку CycleJS использует виртуальную DOM-библиотеку Snabbdom, я написал snabbdom-template. Этот модуль вставляет динамические данные, ориентируясь на стандартные имена тегов HTML и другие селекторы CSS и заменяя фиктивные значения.
Вот упрощенный пример рабочего процесса: сначала я программирую бизнес-логику и основной HTML:
main.js
...
function main(sources) {
const data$ = sources.incomingdata
const vdom$ = data$
.map(list => div([
div('#message', 'Ready.'),
ul('#mapme', list.map(item => li(item)))
])
)
return {
DOM: vdom$
}
}
...
Или — при использовании Babel и snabbdom-jsx:
...
const vdom$ = data$
.map(list =>
<div>
<div id="message">Ready.</div>
<ul id="mapme">
{list.map(item => <li>{item}</li>)}
</ul>
</div>
)
...
Затем я говорю своей дочери, что мне нужно сообщение div
с id
, установленным на «сообщение», за которым следует неупорядоченный список с id
, установленным на «mapme». Допустим, она предоставляет файл, содержащий:
список.html
<div>
<div id="message">Message goes here.</div>
<ul id="mapme">
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
</ul>
</div>
Затем я изменяю свой main.js на:
...
const snabbdom_template = require('snabbdom-template')
const fs = require('fs')
const template = fs.readFileSync('list.html', 'utf-8')
function main(sources) {
const data$ = sources.incomingdata
const vdom$ = data$
.map(list => snabbdom_template(template, {
'div#message': 'Ready.',
'#mapme': {_map: {'li': list}}
}))
return {
DOM: vdom$
}
}
...
Когда я связываю main.js с помощью browserify, я добавляю brfs преобразует шаблоны в пакет:
browserify -t brfs main.js > bundle.js
Теперь она может вносить изменения в list.html — до тех пор, пока остаются основные HTML и идентификаторы или классы, используемые для целевых данных, — и единственное, что мне нужно сделать, — это перекомпоновать.
person
bloodyKnuckles
schedule
06.01.2018