« Поставить закладку » « Сделать стартовой »

« Форумы » « Блоги » « Статьи » « Новости » « Файлы » « Realcoding IRC » « Site map » « Поиск »


Главная Главная
Анонсы Анонсы
Форумы Форумы
Каталог Каталог
Поиск Поиск
Опросы Опросы
Книжный магазин Книжный магазин
Реклама на сайте
Публикации Публикации
Партнеры Партнеры
Карта Карта сайта
Рассылки Рассылки
RSS экспорт
Настройки Настройки
О нас пишут О нас пишут
Контакты Контакты
Гостевая книга Гостевая книга







    Популярное
Работа с кодом HTML

Оптимизация PHP скрипта - "правильный" PHP

Разработка Java-приложений для работы с данными DB2 XML

Объекты в Oracle – это очень просто

Функция AccessResource

Функция GetSystemPaletteEntries

Функция GlobalCompact

Получение файлов через FTP

Реакция на выбор узла дерева

Введение


ПнВтСрЧтПтСбВс
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      
    Архив файлов

    Сообщества

    Документация

    Кто на сайте
Вы не зарегистрированы.
Имя:

Пароль:

Запомнить

Регистрация позволит Вам пользоваться дополнительными сервисами.
Сейчас на сайте:
Гостей: 54
Пользователей: 0

Статьи:: Интернет технологии :: Java Script :: JavaScript-фреймворк для создания веб-калькуляторов


отправить ссылку другу версия для печати  Обсудить на форуме

JavaScript-фреймворк для создания веб-калькуляторов



На днях мне понадобилось сделать веб-калькулятор. Это был не первый калькулятор, который я писал, и воспоминания о кодировании на JavaScript логики вычислений, каждый раз заново, вовсе не прибавляли энтузиазма. Очевидно, с этим нужно было что-то сделать, отделив логику вычислений, свою на каждом сайте, от кода и алгоритма самого калькулятора ("посмотреть выбранное пользователем значение — вычислить сколько это стоит").

Первое, что приходит на ум в таких случаях, это использование стандартных массивов или объектов. Но такой подход черезчур тяжеловесный. Намного удобнее было бы использовать хэши, но их поддержка в JavaScript очень ограничена. Позтому я решил применить библиотеку Prototype, в которой есть праьтически полноценный класс Hash, и описывать логику работы калькулятора и поля формы хэшем calculations. Это позволило сделать код калькулятора достаточно простым (хотя я тут вижу широкое поле для рефакторинга) и расширяемым.

var calculations = new Hash({})

function calcPrice() {
var f = document.forms['calculator']
var price = 0
calculations.each(function(pair) {
if(f[pair.key] == null){
alert(pair.key)
}
if(pair.value['fieldtype'] == 'counter' && f[pair.key].value.match(/^d+$/)){
price += f[pair.key].value * pair.value['price']
}
if(pair.value['fieldtype'] == 'radio'){
val = getRadioValue(f[pair.key])
} else {
val = f[pair.key].value
}
if(pair.value['fieldtype'] == 'radio' || pair.value['fieldtype'] == 'select'){
if(val != 0){
price += pair.value['prices'][val]
}
}
})

$('pricevalue').innerHTML = price + ' руб.'
}


Для получения значений радиокнопок используется вспомогательная функция getRadioValue.

function getRadioValue(radio) {
for(i = 0; i < radio.length; i++){
if(radio[i].checked)
return radio[i].value
}
return 0;
}


Ключами хэша calculations являются имена полей формы, значениями - хэши с правилами вычисления цены по данному полю. Каждое правило содержит ключ fieldtype, указывающий на тип поля, а также другие ключи, описывающие, как обрабатывать поле (в моем случае price и prices). Такая архитектура позволяет при необходимости легко наращивать функциональность и сложность калькулятора, не переписывая созданный ранее код. Я использовал три типа полей.

Кроме того, правила в хэше calculations могут модифицироваться динамически, например, при AJAX-загрузке частей формы.

 

Поле counter


Текстовое или иное поле, в котором указывается количество; сумма рассчитывается умножением введенного пользователей количества на значение ключа price.
calculations['units'] = $H({ fieldtype:'counter', price:5.50 })
<input type="text" value="2" name="counter">


 

Поле select


 

Выбор списка из нескольких элементов. У каждого элемента есть свой алфавитно-цифровой идентификатор и определенная стоимость. Зависимость идентификатор—цена задается хэшем в ключе prices правила.


calculations("color") = $H({ fieldtype:'select', prices:$H({white:20.95,red:49.55}) })
<select name="color">
<option value="white">белое</option>
<option value="red">красное</option>
</select>


 

Поле radio


 

Аналогично полю select за исключением того, что для выбора используются радиокнопки.


calculations("color") = $H({ fieldtype:'radio', prices:$H({white:20.95,red:49.55}) })
<input type="radio" name="color" value="white" /> белое
<input type="radio" name="color" value="red" /> красное

Автор: http://ptitov.habrahabr.ru/




Рубрика: Java Script



О том как разработчики пьют кофе.

Юмор

Сегодня ночью вернулся из Москвы, где я посетил сразу три конференции — SQA, PM Days и PHPconf. На конференции прозвучала масса интересных докладов, о которых наверняка еще не раз напишут, я же хочу поделиться некоторыми забавными наблюдениями. В перерывах между докладами все присутствующие могли выйти в холл, где их ожидали вкусные плюшки, молоко, чай и кофе. Для последнего на столах установили пять термосов. Разумеется для более чем двухсот участников конференции их было явно недостаточно и на каждой конференции эту проблему решали по своему, как умели.


Подробнее... | Рубрика: Юмор | Добавлено: 24.06.2008

Работаем с LINQ to XML.

LINQ

Что же, попробуем раскрыть принципы работы этой новой технологии от Microsoft.


Подробнее... | Рубрика: LINQ | Добавлено: 24.06.2008

XmlSerializer - Assembly Leak без спроса.

Сборки и развертывание

В некоторых частях .NET Framework, таких как XmlSerializer, используется внутреннее динамическое создание кода.XmlSerializer создает временные файлы C#, компилирует результирующие файлы во временную сборку и затем загружает эту сборку в процесс. Такое создание кода тоже стоит сравнительно дорого, поэтому XmlSerializer размещает временные сборки в кэш, по одной на каждый тип. Это значит, что в следующий раз при создании кода XmlSerializer для класса Х не будет создаваться новая сборка, а будет использована сборка из кэша. Однако, не все так просто.


Подробнее... | Рубрика: Сборки и развертывание | Добавлено: 24.06.2008

Остальные статьи:

Реализация MVC в WPF. Александр Шер
ADO.NET Sync Services. Марат Бакиров
Рефакторинг JavaScript с применением Microsoft ASP.NET AJAX. Александр Шер
Архитектура приложений: интерфейс пользователя. Дмитрий Мартынов
Введение в Windows Workflow Foundation. Марат Бакиров
Создание расширяемых и удобных библиотек на платформе .NET. Особенности реализац...
Почему Ruby и Python не могут занять место стареющей Java
Использование пространств имен для организации JavaScript-кода
Создание сложных приложений в ExtJS
Google добавил интерфейс для AJAX-библиотек
Стивен Синофски о Windows 7
Несколько вещей об Ajax, которые должен знать веб-мастер
Model-View-Controller для JavaScript
Remix 2008: интернет меняет Microsoft
Планировщик задач на JavaScript
Построение систем автоматического протоколирования Си/Си++ кода

Цитата дня (все,добавить):

    Рубрикатор

Программирование

C/С++
Обучение
Windows API
XAML
Моделирование
Паттерны
Visual Basic 7 .NET
WxWidgets
Функции WinApi
Функции С++
Разработка под Mac OS
Eiffel
Visual Studio 2008
UI дизайн
Алгоритмы
Конкурсные статьи
Turbo Pascal
Visual Studio
CASE-средства
Visual Studio 2005
Без VCL
Delphi
Тех. документация
Тестирование
Software Testing
ООП
TCP/IP
Google Android
Windows Installer
.NET Framework
Драйвера
C# C Sharp
Справка
Проектирование
Информ. системы
Visual Basic
Assembler
Оптимизация кода
Gtk+
Компоненты
Реинжиниринг
Управление проектами
Extreeme programming
Lotus Notes
Алгебраическое проектирование

Интернет технологии

PHP
Perl
ASP
WAP
Cookies
SSI
CGI
Web Servers
VB Script
DNS
CSS
XML
Html
Java Script
Java2ME
Firewall
Flash
.htaccess
Apache
VRML
Протоколы
Поисковые системы
Технология JAVA
Учебник по PHP
Учебник по JavaScript
Учебник по XML
Java Q&A
AJAX
DHTML
XHTML
Dreamweaver
Web 2.0
Python
Вебмастеру
Cisco
Ruby on Rails
Silverlight

Базы данных

Access
InterBase
MySQL
Oracle
ADO .NET
Основы SQL
Учебник по Access 2002
MS
Microsoft FoxPro
Доступ к данным
XML в MS SQL Server 2000
ODBC и MyODBC
Обучение
Caché
DB2
PostgresSQL
Sybase
Теория
Хранилища данных
Безопасность
Реляционные данные
MySQL и mSQL

Остальное:

Разное
Обзоры книг
Безопасность
Графика и дизайн
Юмор
Linux
Фракталы
Microsoft Axapta
Многоядерность
Сети
Microsoft Office
Работа
MS-DOS
Криптография
Графика и игроделание
Новости SDK
Системы защиты
Учебник по AutoCad
CVS
Windows XP
Windows Server 2003
Windows Vista
Windows 7
Мероприятия