Bliss.js — это легковесная библиотека для работы с DOM, ориентированная на простоту и производительность. Одной из ключевых возможностей её использования является реализация паттерна MVC (Model–View–Controller), который обеспечивает чёткое разделение данных, представления и логики управления.
Модель отвечает за хранение данных и уведомление остальных компонентов об их изменении. В Bliss.js можно создать модель как объект с набором свойств, а для отслеживания изменений использовать события.
const model = {
data: {
users: []
},
onChange: function(callback) {
this._callback = callback;
},
setData: function(key, value) {
this.data[key] = value;
if (this._callback) this._callback(key, value);
},
getData: function(key) {
return this.data[key];
}
};
Особенности:
onChange позволяет подписаться на изменения
модели.setData автоматически уведомляет контроллер или
представление о модификации данных.View отвечает за отображение данных модели в DOM. Bliss.js
предоставляет удобные методы для манипуляции элементами страницы,
например $.create, $.bind,
$.find.
const view = {
init: function(rootSelector) {
this.root = $(rootSelector);
this.userList = this.root.find('.user-list');
},
renderUsers: function(users) {
this.userList.empty();
users.forEach(user => {
const li = $.create('li', { textContent: user.name });
this.userList.append(li);
});
}
};
Ключевые моменты:
$.create для динамического создания
элементов.empty очищает контейнер перед повторным
рендерингом.Контроллер связывает модель и представление, управляет событиями и изменяет состояние модели в ответ на действия пользователя.
const controller = {
init: function(model, view) {
this.model = model;
this.view = view;
this.model.onChange((key, value) => {
if (key === 'users') this.view.renderUsers(value);
});
this.view.root.on('click', '.add-user', (e) => {
const name = this.view.root.find('.user-name').val();
if(name) {
const users = this.model.getData('users');
users.push({ name });
this.model.setData('users', users);
}
});
}
};
Принципы работы:
.on).Bliss.js позволяет минимизировать ручное обновление DOM с помощью
методов, таких как $.bind, которые автоматически
синхронизируют данные модели с элементами страницы.
const model = { count: 0 };
$.bind('.counter', 'textContent', model, 'count');
$('.increment').on('click', () => {
model.count += 1;
});
Преимущества:
Для крупных приложений рекомендуется:
UserModel,
ProductModel и т.д.).UserListView,
ProductGridView).$.trigger,
$.on) для коммуникации между компонентами, чтобы снизить
связность.Bliss.js позволяет динамически вставлять HTML-шаблоны без сторонних библиотек:
function renderTemplate(template, data) {
return template.replace(/\{\{(\w+)\}\}/g, (_, key) => data[key] || '');
}
const template = '<li>{{name}}</li>';
const users = [{ name: 'Alice' }, { name: 'Bob' }];
users.forEach(user => {
view.userList.append($.create('li', { innerHTML: renderTemplate(template, user) }));
});
Преимущества шаблонного подхода:
Модель может получать данные из внешних источников, используя
стандартный fetch:
fetch('/api/users')
.then(response => response.json())
.then(data => model.setData('users', data));
setData автоматически
обновляется view.