Фреймворк для простих проектів на jQuery

Привіт Хабр! Хочу поділиться своєю напрацюванням. Відразу скажу для яких проектів може бути застосовна моя бібліотека — для статичних сторінок, де є робота з даними з БД через вивантаження/завантаження через AJAX. Припустимо, у вас є простий сайт на який-небудь CMS і вам потрібно зробити калькулятор виходячи з продуктів у БД, потім порахувати вартість і підкоригувати. Ось це прямо ідеальна завдання для цієї бібліотеки.
image

Преамбула
Я не сильний в розробці на javascript, але по роботі доводиться розбиратися і писати хотілки різного роду. Інтерфейси ускладнюються, код дублюється, доповнюється і у підсумку виходить досить-таки сумбурна каша без документації та структури. Ні, ні, ви не подумайте. Усе починається просто:

— Потрібно зробити, щоб ця таблиця згорталася.
Минув тиждень.
— Треба, щоб ці дані підсвічувалися стовпців або рядків.
Минув тиждень.
— Потрібно, щоб із стовпців малювалися графіки, а з рядків користувач потім міг налаштувати дані для експорту в таблицю.
Минув тиждень.
— Потрібно те, що ми зробили, скопіювати сторінку призначень прав і дані поміняти на користувачів і групи і трохи змінити логіку роботи.

І так далі. Більше 2 років це накопичувалося, збиралося і збиралося. Переводити на якийсь фреймворк проект не дають, по тій простій причині — доведеться вивчати всій його команді. А ні я, ні вони не впевнені в тому, що ми витратимо на його вивчення час, а потім він ніде не знадобиться.

Фабула
Я почав писати прошарок для полегшення роботи з об'єктами бази даних. Створення нових елементів для вставки, видалення, фільтрація.

Приклад моделі користувача
new Model( 'User' ,{
'name' : {
type : 'string',
def : 'noname',
iskey : true
},
'lastname' : {
type : 'string'
}
})
new User({name:'Вася' , 'lastname' : 'Пупкін'})

Першим аргументом передається назва моделі, яка згодом стане глобальної змінної.
Другим — об'єкт з набором властивостей моделі та описом цих властивостей.

Зв'язок моделей
new Model( 'User' ,{
'name' : {
type : 'string',
def : 'noname',
iskey : true
},
'lastname' : {
type : 'string'
}
})

new Model( 'Group' ,{
'name' : {
type : 'string',
def : 'noname',
iskey : true
}
})


new Model( 'UserInGroup' ,{
'user' : {
type : function(_name){
return new User({name:_name})
},
'group' : {
type : function(_name){
return new Group({name:_name})
},
}
}
})
new User({name:'Вася' , 'lastname' : 'Пупкін'})
new Group({name:'usergroup'})
var a = new UserInGroup({ user : 'Вася' , group : 'usergroup' })

console.log( a )
/*
user : Object
name
lastname
group : Object
name
*/

Зв'язки об'єктів з об'єктами — це посилання на кеш TObject._cache.

З описів властивостей можу відзначити поки 3 — iskey, type, isfrooze.

iskey — використовується для створення унікального ключа в об'єкта в кеші. Якщо він один, то до об'єкта можна звернутися через метод id, заздалегідь знаючи ключ.

Приклад
new Model( 'User' ,{
'name' : {
type : 'string',
def : 'noname',
iskey : true
},
'lastname' : {
type : 'string'
}
})
new User({name:'Вася' , 'lastname' : 'Пупкін'})
User.id('Вася')

type — типи значень. Поки їх кілька — bool, int, string, function. Остання використовується для зв'язування об'єктів. Планується створення власних.

isfrooze — властивість, яка при заповненні більше не змінюється. Це зроблено на випадок, якщо ви боїтеся ненавмисно змінити властивість.

Є кілька властивостей моделей. all — вивантаження всіх об'єктів:

User.all() // return [ Object , Object]

find({ property: value }) — вивантаження всіх оюъектов відповідних за правило:

User.find({name:'Vasya'}) // return [ Object ]

id( ident ) — вивантаження одного об'єкта по заданому ключу:

User.id(10) // return Object

Для двостороннього зв'язку DOM і об'єктів створено метод jQuery jsdata, аналогічний data, але він пов'язує об'єкт з DOM. Отримати зв'язок можна через метод моделі getDOM:

$('<div/>').addClass('test').jsdata('model' User.id(10))
User.id(10).getDOM('model') // return DOM
$('<div/>').jsata('model') // return Object

» Посилання на проект

Буду радий конструктивній критиці.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.