Я поигрался с предложением Microsoft о jQuery Templates и Связывание данных , и пока все идет отлично.
TLDR,ознакомьтесь с этой демонстрацией .
Очень просто просто связать фрагмент HTML с объектом JavaScript, а затем обновлять только объект JavaScript и обновлять HTML автоматически.
Вот простой пример.Создайте HTML, который будет представлять ваш виджет.
<div class="book">
<img width="100" height="100" src="" />
<div class="title"></div>
<div class="price"></div>
</div>
Затем создайте объект JavaScript и динамически свяжите его с приведенным выше HTML-кодом.Вот пример объекта:
var book = {
title: "Alice in Wonderland",
price: 24.99,
onSale: true,
image: "http://bit.ly/cavCXS"
};
Теперь перейдем к фактической части связывания.Элементы, которые мы собираемся связать:
- A
data-onsale
атрибут во внешнем div, который будет либо «истинным», либо «ложным» - Изображение
src
атрибут для свойства изображения нашей книги - заголовок div для свойства заголовка
- ценовой div для свойства цены
Следующее устанавливает связь.Обратите внимание, что здесь мы выполняем только одностороннее связывание, но можно установить двухстороннее связывание также с помощью функции linkBoth
.
$(book)
.linkTo('title', '.title', 'html')
.linkTo('price', '.price', 'html')
.linkTo('image', '.book img', 'src')
.linkTo('onSale', '.book', 'data-onsale')
Вот и все.Отныне просто обновляйте объект книги, и HTML-код будет автоматически обновляться.Обновите свойства книги, как если бы вы обновляли атрибуты html, используя функцию attr
.
$(book).attr({
price: 14.75
});
или
$(book).attr('price', 14.75);
Приведенный выше код использует только связывание данных, но в предложении также упоминается объединение связывания данных с шаблонами, что сделает это еще проще.Насколько я понимаю, вы сможете сделать это и получить вышеуказанную функциональность:
<script id="bookTemplate" type="text/html">
<div class="book" data-onsale="{{link onSale }}">
<img width="100" height="100" src="{{link image }}" />
<div class="title">{{link title }}</div>
<div class="price">{{link price }}</div>
</div>
</script>
Свяжите вышеуказанный шаблон с объектом книги за один шаг и добавьте его на страницу:
$('#bookTemplate').render(book).appendTo('body')
Обновите свойства объекта book, и изменения будут отражены.