21.02.2013, 22:04
|
|
Профессор
|
|
Регистрация: 26.03.2012
Сообщений: 823
|
|
Оцените страничку (ООП)
Сделал небольшой плагин, который динамически вычисляет цену товара, в зависимости от количества товаров в корзине
Хотел полностью отделить DOM от кода, вроде получилось.
Это мое первое ООП, хотелось бы услышать мнения!
Демо: http://demo.hnoe.ru/7.html
Код на github: https://github.com/hnoe/Sale-Plugin
Как работает:
сам скрипт помещается в head, в body создается объект с данными DOM:
(function (window) {
"use strict";
var d = window.document,
a = new window.App({
itemsBox : d.getElementById("items"), // контейнер с товарами
cartItemsBox : d.getElementById("cartItems"), // элемент вывода кол-ва товаров в корзине
cartPriceBox : d.getElementById("cartPrice"), // элемент вывода суммы за товары в корзине
discountBox : d.getElementById("discount"), // элемент вывода скидки
postButton : d.getElementById("post"), // кнопка оформления заказа
switchBox : d.getElementById("discounts"), // контейнер с кнопками для переключения скидки
displayCart : d.getElementById("cartItems"), // элемент отображающий содержимое корзины
switchArr : d.getElementById("discounts").getElementsByTagName("button"), // массив кнопок со скидками
modelClass : "name", // имя класса элементов с названием модели
oldPriceClass : "old", // имя класса элементов со старой ценой
newPriceClass : "new", // имя класса элементов с новой ценой
toCartClass : "to", // имя класса кнопки "в корзину"
fromCartClass : "from", // имя класса кнопки "из корзины"
toCartText : "положить в корзину", // текст элемента кнопки "в корзину"
fromCartText : "убрать из корзины", // текст элемента кнопки "из корзины"
url : "action.php" // для ajax
}).init();
}(this));
Последний раз редактировалось dmitry111, 21.02.2013 в 22:27.
|
|
21.02.2013, 22:46
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
Сообщение от dmitry111
|
Это мое первое ООП, хотелось бы услышать мнения!
|
1.По интерфейсу - Нормально - просто и доступно, не хватает динамики, к примеру при нажатии положить, появляется гиф - картинка вверху, cправо с корзинкой в которую что то закидывается.
2. А если я хочу две зажигалки однотипных купить к 23 для подарков ?
3. Некорректный вид извещения:
10 - 19 товаров - 50%
20 - 34 товаров - 60%
35 - 40 товаров - 70%
Наверно
от 10 до 19 шт.товара - 50%
от 20 до 34 шт.товара - 60%
от 35 до 40 шт.товара - 70%
Последний раз редактировалось Deff, 21.02.2013 в 22:54.
|
|
22.02.2013, 00:00
|
|
Профессор
|
|
Регистрация: 26.03.2012
Сообщений: 823
|
|
Сообщение от Deff
|
1.По интерфейсу - Нормально - просто и доступно, не хватает динамики, к примеру при нажатии положить, появляется гиф - картинка вверху, cправо с корзинкой в которую что то закидывается.
|
это можно прикрутить, просто возится не хочется.
Сообщение от Deff
|
2. А если я хочу две зажигалки однотипных купить к 23 для подарков ?
|
там все в единственном экземпляре)
Сообщение от Deff
|
3. Некорректный вид извещения:
|
поправил
|
|
22.02.2013, 00:03
|
|
Профессор
|
|
Регистрация: 26.03.2012
Сообщений: 823
|
|
А как ООП?
Мне именно в этом хочется узнать свои слабые места, чтобы в следующих работах обратить на них внимание!
|
|
22.02.2013, 00:06
|
|
Профессор
|
|
Регистрация: 26.03.2012
Сообщений: 823
|
|
Изначально хотел скрипт разбить на три части (три конструктора):
1 конструктор скидки
2 конструктор отображения корзины (появляющееся сообщение при клике на циферку с товарами в корзине)
3 конструктор отображения формы для оформления заказа.
Но потом подумал, уж слишком размазано будет и сделал все в одном
Как бы вы сделали подобную задачу использую ООП?
Последний раз редактировалось dmitry111, 22.02.2013 в 00:09.
|
|
22.02.2013, 00:21
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
Сообщение от dmitry111
|
Как бы вы сделали подобную задачу использую ООП?
|
Сейчас основное внимание заказчика на графическое оформления, поэтому при вёрстке ищется красивая визуальная оболочка, а затем уж OOП
Наверно юзабельнее объединить мини превью зажигалок в пакеты по 6-8 штук, эти пакеты засунуть в горизонтальный слайдер - перемещающийся по наведению вправо-влево - в зависимости от края наведения и останавливающийся по курсору в центре.
Клик по минипревью - выдвижение полной картинки с предложением положить в корзину... Выбор должен быть постепенно вовлекающим зрелищем, - заворожить покупателя, а далее - уже дело техники и ООП...
|
|
22.02.2013, 10:12
|
sinistral
|
|
Регистрация: 28.03.2011
Сообщений: 5,418
|
|
Сообщение от dmitry111
|
Хотел полностью отделить DOM от кода, вроде получилось.
|
// Инициализация
App.prototype.init = function () {
var self = this;
this.switchArr[this.activeDisc].className = "active";
this.updateData(this.switchArr[this.activeDisc].value);
App.utils.addEvent(this.itemsBox, "mousedown", function (e) {
self.filterEvent(e);
}, false);
не получилось, сэр. даже совсем.
сделай класс, который будет оперировать только данными - никаких элементов, и даже классов. никакого намёка на DOM.
DOM замешивай либо в дочернем классе, либо в обработчиков событий.
ООП - это во многом событийное программирование
т.е. не должно быть таких методов :
// Показывает ошибку при заполнении формы
App.prototype.formValidate.showError = /* DOM SHOW BLA BLA BLA */
а он должен быть заменен на микшированный EventEmitter (из Node.js ... поищи, довольно удобная штука), или любой другой класс, описывающий паттерн "подписчик".
тогда у тебя будет такая вещь:
// мне пофигу на ошибки в форме.
/* ничего нет! */
// я хочу выводить ошибки алертом, как в суровых 00
myForm.on("inputerror", function (e) {
if (e instanceof window["Криворукий пользователь"]) {
alert(e.message);
}
});
Последний раз редактировалось melky, 22.02.2013 в 10:16.
|
|
22.02.2013, 12:45
|
|
Профессор
|
|
Регистрация: 26.03.2012
Сообщений: 823
|
|
Сообщение от Deff
|
Сейчас основное внимание заказчика на графическое оформления, поэтому при вёрстке ищется красивая визуальная оболочка, а затем уж OOП
|
да нет, я это для себя, с целью получше изучить ООП. Если нужно было бы чтоб все выезжало, была анимация и визуальные фишки я бы наверное использовал jQuery.
melky,
благодарю!)
|
|
23.02.2013, 11:58
|
|
Рассеянный профессор
|
|
Регистрация: 06.04.2009
Сообщений: 2,379
|
|
Самый простой случай: въюшка свободно работает с тем куском DOM, который ей доверили. Модель ничего не знает не про DOM не о въюшке, имеет геттеры через которые отдает данные, и сеттеры через которые их принимает, пуляясь при этом событиями.
У Вас и модель и въюшка замешаны в одном классе, и Вы то ли DOM у въюшки пытаетесь забрать, то ли модели его впарить.
Паттерн программирования "каша"?
|
|
23.02.2013, 12:05
|
sinistral
|
|
Регистрация: 28.03.2011
Сообщений: 5,418
|
|
Сообщение от Riim
|
Паттерн программирования "каша"?
|
Божественый объект
|
|
|
|