Модераторы: Sardar, Aliance

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> $script, в полку фреймворков прибыло. 
:(
    Опции темы
cruelangel
Дата 4.10.2007, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 319
Регистрация: 12.9.2007

Репутация: 1
Всего: 8



скачать откомпилированную версию
посмотреть исходники через SVN

идеология:
- сглаживание неровностей между различными браузерами
- реализация удобных расширений объектной модели
- простота и наглядность кода с минимумом браузеро-специфичных участков
- модульность и простота адаптации к существующим фреймворкам

что пока есть:
- расширение базовых прототипов Object, Array, Function, String, Number
- обогащение экземпляров Event (на очереди - Range, Selection, StyleSheet)
- враппинг узлов DOM-а
- алерт-панельки вместо стандартного модального окна
- динамическая подгрузка html

скоро также ожидаются:
- расширения для других объектов
- визивиг редактор

отличительные особенности:
- благодаря враппингу (а не обогащению, как в других фреймворках) можно работать с любыми узлами DOM (а не только с html-элементами), используя при этом всю мощь объектной модели. для доступа к самому DOM-узлу используется поле raw.
- используя один и тот же синтаксис можно вешать обработчики событий как на элементы html, так и на любые другие объекты, причём вы можете свободно определять свои события и вешать произвольное количество обработчиков.
- объём пока 12кб в непожатом виде (финальная версия ожидается примерно в два раза больше).

несколько примеров:

Код
document.$observe( 'domready', function( ){
    alert( $doc );
    alert( $body.$value() );
})
 после загрузки страницы, но до загрузки картинок и прочего, выведет весь полученный html, включая тэги <html> (outerHTML), потом содержимое body без тэгов <body> (innerHTML).


Код
var foo= { bar: 123 };
foo.$observe( 'myevent', function( ev ){
    alert( ev );
})
alert( foo );
foo.onmyevent( [ 1, 2 ] );
 выведет сначала 
Цитата
{ bar, onmyevent }
, то есть перечисление установленных полей объекта, потом: 
Цитата
{ a, b, $nodefault, $stop, $target, $key }
, где поля начинающиеся с бакса добавляются к любому объекту события

в коде можно найти ещё пару интересных примеров...

а теперь, внимание, вопрос:
у каждого объекта есть есть метод $each, который применяет переданную ей функцию к каждому "установленному" полю объекта (то есть оно не должно быть null, undefined и не должно быть равно соответствующему полю прототипа объекта).
также у каждого объекта есть метод $give, который должен копировать поля объекта объекту, переданному параметром (например, $object.$give(window)). так вот, возможны две реализации:
1. применяется метод $each и копируются только "установленные" поля
2. копируются вообще все поля
никак не могу определиться, какой из них является труъ, пока остановился на втором. 

ну и вообще, буду рад интересным идеям по усовершенствованию фреймворка.

Это сообщение отредактировал(а) cruelangel - 7.10.2007, 20:10
PM MAIL   Вверх
cruelangel
Дата 5.10.2007, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 319
Регистрация: 12.9.2007

Репутация: 1
Всего: 8



добавил аякс. тест
PM MAIL   Вверх
AKS
Дата 5.10.2007, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник форума
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 20.9.2006

Репутация: 2
Всего: 52



cruelangel, при беглом просмотре обратил внимание на странный способ клонирования:
Код

$number.$clone= function( deep ){
    return this;
};

В чем суть?
PM MAIL   Вверх
cruelangel
Дата 5.10.2007, 21:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 319
Регистрация: 12.9.2007

Репутация: 1
Всего: 8



суть в том, что числа наследуют методы от объекта. в частности, $clone для объекта выглядит так:
Код
$object.$clone= function( deep ){
    var ret= new this.constructor;
    this.$each( function( val, key ){
        ret[ key ]= deep ? val.$clone( deep ) : val;
    });
    return ret;
};
 что не имеет смысла в контексте примитивных типов.
PM MAIL   Вверх
Zeroglif
Дата 5.10.2007, 23:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 644
Регистрация: 22.9.2005

Репутация: 1
Всего: 66



Цитата(cruelangel @  5.10.2007,  22:32 Найти цитируемый пост)
что не имеет смысла в контексте примитивных типов

В каком месте определяется, от примитивного значения обратились к Number.prototype или от объекта соответствующего подтипа?

Немного посмотрел... Зачем все нативные прототипы, наследующие от Object.prototype (Array.prototype, Function.prototype...), расширяются теми же кастомными слотами/свойствами, что и сам Object.prototype? Зачем в первой же функции $object.$get идёт сравнение с одноимённым свойством прототипа, такой код разве не валиден:

Код

function f() {};
f.x = 'foo';
f.prototype.x = 'foo';

alert(f.$get('x')); //-> undefined


И та же самая странная проверка одноимённого свойства для случая, когда есть слот prototype, в функции $object.$each. Вычисление браузера сделано на базе модифицируемых строк, то бишь ненадёжное. Объекты заводятся без var неполным именем, возможен конфликт с одноимёнными id/name в IE. Родной наиважнейший toString убит ради смешной визуализации, увязанные с ним вещи уже не осуществить. Прототипы по кругу массово обвешаны, я бы вообще-то призадумался о "простоте адаптации к существующим фреймворкам". И $зачем $тебе $доллар $в $таких $количествах, $читать $тяжело, $смысла $мало, $доллар is intended for use only in mechanically generated code...  smile

PM MAIL WWW   Вверх
cruelangel
Дата 6.10.2007, 00:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 319
Регистрация: 12.9.2007

Репутация: 1
Всего: 8



> В каком месте определяется, от примитивного значения обратились к Number.prototype или от объекта соответствующего подтипа?

что б я ещё знал как это проверить smile


> Зачем все нативные прототипы, наследующие от Object.prototype (Array.prototype, Function.prototype...), расширяются теми же кастомными слотами/свойствами, что и сам Object.prototype?

а это напрямую связано с моим вопросом в первом посте smile просто обогащение происходит через $give. а $give в текущей реализации отдаёт всё, что у него есть.  это удобно, например, в таком случае: var i= [0]; $object.$give( i ); - и дальше массив ведёт себя как объект (различие в способе итерации).


> Зачем в первой же функции $object.$get идёт сравнение с одноимённым свойством прототипа, такой код разве не валиден:

валиден, но в данном случае можно считать, что собственное значение свойства у объекта "сброшено". или у тебя есть другие варианты проверки?
поясню для чего это надо:
так как я расширяю прототип всех обектов, установленные мною поля наследуются всеми объектами, а в некоторых случаях требуется чистый и незамутнённый родителями хэш. использование $each и $get позволяет работать с объектом, как с чистым хэшем.


> Вычисление браузера сделано на базе модифицируемых строк, то бишь ненадёжное.

там в основном проверяется appName, который никто не меняет. по userAgent определяется только сафари, но у него обычно его тоже не меняют. есть более надёжные способы? 

> Объекты заводятся без var неполным именем, возможен конфликт с одноимёнными id/name в IE.

это щас исправлю smile


> Родной наиважнейший toString убит ради смешной визуализации, увязанные с ним вещи уже не осуществить.

пример? мне, например, куда интереснее получать от ноды её сериализацию, а не непонятные "[HTMLParagraphElement]", с которыми дальше делать особо нечего. 


> И $зачем $тебе $доллар $в $таких $количествах, $читать $тяжело, $смысла $мало

чтобы чётко выделялись среди других объектов/методов и случайно не пересекались с пользовательскими.


> $доллар is intended for use only in mechanically generated code

дык у меня скрипт механически компилируется из модулей пхп-скриптом   smile 

Это сообщение отредактировал(а) cruelangel - 6.10.2007, 00:39
PM MAIL   Вверх
Zeroglif
Дата 6.10.2007, 01:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 644
Регистрация: 22.9.2005

Репутация: 1
Всего: 66



Цитата(cruelangel @  6.10.2007,  01:31 Найти цитируемый пост)
что б я ещё знал как это проверить

Дело не в этом. Функция Number.prototype.$clone не клонирует объекты (подтип Number), возвращает их же, а в отношении примитивных значений меняет тип:

Код

Number.prototype.$clone = function () {
    return this;
};

var x = new Number('666');
var y = 666;

var xClone = x.$clone();
var yClone = y.$clone();

alert(xClone == x);   //-> true (вместо клона ссылка)
alert(typeof yClone); //-> object (вместо примитивного значения объект)


Та же кухня у тебя и в отношении клонирования строк, объекты не клонируются, примитивы меняют тип. Ну, и в toString то же самое, имеем объект на выходе из функции по имени "вСтроку".

Цитата(cruelangel @  6.10.2007,  01:31 Найти цитируемый пост)
просто обогащение происходит через $give

Если ты изнасиловал Object.prototype, то массивы и проч. с этим насилием уже могут работать, наследуют они его, зачем ещё раз поступать с ними точно так же грубо.  smile 

Цитата(cruelangel @  6.10.2007,  01:31 Найти цитируемый пост)
что собственное значение свойства у объекта "сброшено". 

Оно не сброшено, не закрыто, ты сравниваешь свойство f.x и f.prototype.x (из моего примера), это разные не связанные наследованием объекты, "к чистому хешу" это никак не относится.

Цитата(cruelangel @  6.10.2007,  01:31 Найти цитируемый пост)
проверяется appName, который никто не меняет, есть более надёжные способы?

Меняют, любители есть, гарантия слабая. Проверка конкретных свойств под конкретную задачу в момент конкретного кроссбраузерного затыка - более правильный подход.

Цитата(cruelangel @  6.10.2007,  01:31 Найти цитируемый пост)
пример?

Гы... алерт уже отсебятину несёт, или посмотри, как конвертируются объекты при сравнении с другим типом, с каким аргументом (если найдёшь) массив join-ится в строку и т.п.

Цитата(cruelangel @  6.10.2007,  01:31 Найти цитируемый пост)
чтобы чётко выделялись

Неа, не вставляет, попробуй 5 долларов вместе соединить или с 2-х сторон, ваще чёткость отжигать будет...  smile
PM MAIL WWW   Вверх
cruelangel
Дата 6.10.2007, 02:38 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 319
Регистрация: 12.9.2007

Репутация: 1
Всего: 8



> Та же кухня у тебя и в отношении клонирования строк, объекты не клонируются, примитивы меняют тип. 

у тебя есть более элегантное и жэлезное решение для каскадного клонирования объектов? а критиковать мы все горазды...


> Меняют, любители есть, гарантия слабая. Проверка конкретных свойств под конкретную задачу в момент конкретного кроссбраузерного затыка - более правильный подход.

через это я уже прошёл, спасибо. особенно весело с таким подходом поддерживать оперу, которая "и нашим, и вашим". ты работал когда-нибудь с выделениями? там затыки на каждом шагу - код превращается в свалку проверок, большая часть которых фактически означает "если ИЕ, то делаем так, иначе делаем через косяк"
а насчёт любителей - они прекрасно знают на что идут.


> алерт уже отсебятину несёт

это основная цель


> или посмотри, как конвертируются объекты при сравнении с другим типом

объекты конвертятся в список ключей, разделённых запятыми и заключённых в фигурные скобки, массивы - в список значений и скобки квадратные.


> Неа, не вставляет, попробуй 5 долларов вместе соединить или с 2-х сторон, ваще чёткость отжигать будет

это противоречит удобству использования. более того, я бы рекомендовал не увлекаться средствами, которые "вставляют" - можно плохо кончить.


Это сообщение отредактировал(а) cruelangel - 6.10.2007, 02:48
PM MAIL   Вверх
AKS
Дата 6.10.2007, 08:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник форума
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 20.9.2006

Репутация: 2
Всего: 52



Цитата(cruelangel @  6.10.2007,  00:31 Найти цитируемый пост)
дык у меня скрипт механически компилируется из модулей пхп-скриптом   smile 

Имена идентификаторам дает машина?

Цитата(cruelangel @  6.10.2007,  02:38 Найти цитируемый пост)
у тебя есть более элегантное и жэлезное решение для каскадного клонирования объектов?

Для того, чтобы помочь найти "элегантное и жэлезное решение", надо понять, зачем это нужно. Я пока так и не понял.

Цитата(cruelangel @  6.10.2007,  02:38 Найти цитируемый пост)
а критиковать мы все горазды...

Так отредактируйте первое сообщение, добавив: "Критика не приветствуется!". Тогда никто не станет вмешиваться в ваши с фреймворком "интимные" отношения. Останетесь с ним tête-à-tête. )))))))))))))))))))))))
PM MAIL   Вверх
cruelangel
Дата 6.10.2007, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 319
Регистрация: 12.9.2007

Репутация: 1
Всего: 8



> Имена идентификаторам дает машина?

нет, это и не требуется


> Для того, чтобы помочь найти "элегантное и жэлезное решение", надо понять, зачем это нужно. Я пока так и не понял.

чтобы создать клон объекта и работать с ними независимо друг от друга. например, есть многоуровневый массив и требуется все строковые значения проэкранировать, не загубив при этом исходный массив.


> Так отредактируйте первое сообщение, добавив: "Критика не приветствуется!"

в яваскрипте довольно дебильная объектная модель. я её исправляю как могу, но не все недостатки удаётся исправить. поэтому критика типа "а вот тут ты не исправил - убей себя" - бесполезна.

Это сообщение отредактировал(а) cruelangel - 6.10.2007, 13:42
PM MAIL   Вверх
AKS
Дата 6.10.2007, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник форума
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 20.9.2006

Репутация: 2
Всего: 52



Цитата(cruelangel @  6.10.2007,  13:36 Найти цитируемый пост)

> Имена идентификаторам дает машина?
нет, это и не требуется

Так вот об этом и речь: "$доллар is intended for use only in mechanically generated code", а Вы собственноручно этим занимаетесь.

Цитата(cruelangel @  6.10.2007,  13:36 Найти цитируемый пост)
есть многоуровневый массив и требуется все строковые значения проэкранировать, не загубив при этом исходный массив.

slice Вам не может помочь?


Цитата(cruelangel @  6.10.2007,  13:36 Найти цитируемый пост)
в яваскрипте довольно дебильная объектная модель. я её исправляю как могу, но не все недостатки удаётся исправить. поэтому критика типа "а вот тут ты не исправил - убей себя" - бесполезна.

Да-а-а. Исправляете, значит? Вот как-раз было бы лучше, чтобы Вы отказались от затеи "исправить" яваскрипт. Уж сколько "добрых дядей" до Вас этим занимались, и все труды напрасны. Тогда бы не было критики: "а вот тут ты не исправил", а наоборот Вас бы похвалили: "молодец, что хоть сюда ты не сунулся".

P.S. Вообще Ваша писанина имеет сильный "привкус" от prototype.js...





Это сообщение отредактировал(а) AKS - 6.10.2007, 15:08
PM MAIL   Вверх
cruelangel
Дата 6.10.2007, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 319
Регистрация: 12.9.2007

Репутация: 1
Всего: 8



> slice Вам не может помочь?

нет, он действует только для массивов и только на один уровень в глубь.
Код
a= [1,[2]];
b= a.slice(0);
a[1].push(3);
a.push(4);
alert( b ); // 1,2,3



> Вообще Ваша писанина имеет сильный "привкус" от prototype.js

это от того, что ты толком не разобрался как минимум в одном из этих фреймворков. 

Это сообщение отредактировал(а) cruelangel - 6.10.2007, 19:33
PM MAIL   Вверх
cruelangel
Дата 6.10.2007, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 319
Регистрация: 12.9.2007

Репутация: 1
Всего: 8



> Вот как-раз было бы лучше, чтобы Вы отказались от затеи "исправить" яваскрипт. 

чем лучше? я вижу недостатки и по мере возможностей пытаюсь от них избавиться. ты же просто закрываешь на них глаза приговаривая "в багдаде всё спокойно, яваскрипт - совершенный язык". в яваскрипте нету аналогов метода clone. если он тебе так мешает - можешь его смело вырезать и не использовать. я же нахожу в нём пользу даже в таком несовершенном виде.

Это сообщение отредактировал(а) cruelangel - 6.10.2007, 19:47
PM MAIL   Вверх
AKS
Дата 6.10.2007, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник форума
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 20.9.2006

Репутация: 2
Всего: 52



Цитата(cruelangel @  6.10.2007,  19:30 Найти цитируемый пост)
олько на один уровень в глубь.

Вот это да!!! И Вы пишете js-library?
Код

var a = [1,[2]];
var b = a.slice(0);
b[1].push(3);
b.push(4);
alert(b);
alert(b[1] instanceof Array);


Добавлено через 1 минуту и 41 секунду
Цитата(cruelangel @  6.10.2007,  19:46 Найти цитируемый пост)
в яваскрипте нету аналогов метода clone. 

Покажите конкретный пример, где он нужен "позарез".

Добавлено через 9 минут и 41 секунду
Цитата(AKS @  6.10.2007,  15:07 Найти цитируемый пост)
Вообще Ваша писанина имеет сильный "привкус" от prototype.js

Так написал, потому что и там, и здесь "нагородили огород" вокруг прототипов встроенных объектов. Все расширения и там, и здесь имеют сомнительную ценность, разве что в самой библиотеке для самих авторов библиотек. Отсюда и соответствующие ассоциации. 
А что, Вам не по-душе это сравнение?

PM MAIL   Вверх
cruelangel
Дата 6.10.2007, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 319
Регистрация: 12.9.2007

Репутация: 1
Всего: 8



> Вот это да!!! И Вы пишете js-library?

ты не мог бы развернуть мысль?


> Покажите конкретный пример, где он нужен "позарез".

в таком случае покажи мне конкретный пример, где "позарез" нужен коть какой-нибудь фреймворк? фреймворки делают для удобства программирования, не для реализации невозможного.

Добавлено через 6 минут и 37 секунд
> Так написал, потому что и там, и здесь "нагородили огород" вокруг прототипов встроенных объектов.

это одна из самых мощных особенностей данного языка. грех ею не воспользоваться.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Здесь публикуют скрипты, которые уже проверены в обсуждениях других тем (при этом полезно поставить ссылки на все смежные обсуждения) или переносятся кем-либо из модераторов по просьбе участников, если видно, что в результате обсуждения темы был написан полезный или интересный скрипт. Третий возможный вариант - участник форума публикует скрипт, заведомо известный как полезный и эффективный, для, возможно, небольшой доработки и обсуждения.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Наши скрипты | Следующая тема »


 




[ Время генерации скрипта: 0.1264 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.