Модераторы: 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   Вверх
AKS
Дата 6.10.2007, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(cruelangel @  6.10.2007,  20:02 Найти цитируемый пост)
ты не мог бы развернуть мысль?

Ну привел же Ваш переделанный пример, в котором b копирует все "уровни". Или "уровни" - это что-то другое? 

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


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


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

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



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

 ->
Цитата(cruelangel @  6.10.2007,  20:02 Найти цитируемый пост)
фреймворки делают для удобства программирования, не для реализации невозможного.


Ну так все же Вы исправляете "дебильную объектную модель яваскрипт", или пишете для своего удобства и в свое удовольствие?

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

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

Добавлено @ 20:51
Цитата(cruelangel @  6.10.2007,  19:46 Найти цитируемый пост)
я вижу недостатки и по мере возможностей пытаюсь от них избавиться. ты же просто закрываешь на них глаза приговаривая "в багдаде всё спокойно, яваскрипт - совершенный язык".


Я никогда и нигде не писал о том, что "яваскрипт - совершенный язык". Однако я твердо убежден, что этот язык не заслуживает того, что о нем очень часто пишут те, кто в яваскрипт, как написал Zeroglif:
Цитата

...не видит связи со своей любимой книжкой про С++

Так вот очень многие, будучи не в состоянии провести параллели с привычным интерфейсом, начинают первым делом проклинать яваскрипт, а затем чудить, изобретая всякую всячину, которая на самом деле не нужна даже даром. В результате на свет появляются причудливые js-фреймворки. Но это еще полбеды. Некоторые потом начинают учить яваскрипт по этим самым писаниям. А потом так и говорят, например: "Я выучил яваскрипт через Dojo!". )))))))))))))))))))

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


Опытный
**


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

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



Цитата(cruelangel @  6.10.2007,  21:02 Найти цитируемый пост)
ты не мог бы развернуть мысль?

Давай я разверну эту мысль, поверил я в эту либу и решил клонировать с её помощью  примитивный такой массивчик:

Код

// беру массив, в котором есть массив, в котором есть массив
var a = [true, [true, [true]]];

// делаю его "глубокий" клон по рецепту cruelangel
var b = a.$clone(true);

// проверяю, похож ли клон на оригинал
alert(b); //-> [ false,[ false, [ false ] ] ]

// вроде чуток похож, проверю теперь, не потерял ли я исходный тип
alert([typeof b[0], typeof b[1][0], typeof b[1][1][0]]); //-> [ object, object, object ]


?




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


Опытный
**


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

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



> Ну привел же Ваш переделанный пример, в котором b копирует все "уровни". Или "уровни" - это что-то другое? 

я привёл пример, иллюстрирующий, что slice создаёт новый массив, каждый элемент которого ссылается на соответствующие значения исходного. это означает, что изменение элементов одного массива автоматически сказывается и на другом.


> Ну так все же Вы исправляете "дебильную объектную модель яваскрипт", или пишете для своего удобства и в свое удовольствие?

"дебильная" в моей фразе означает "неудобная и нелогичная"


> не видит связи со своей любимой книжкой про С++

ты меня с кем-то спутал. очевидно с создателями prototype.js с ихними классами в жабаскрипте.


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

ps: вообще, довольно странно, что столь жаркие споры, доходящие до утверждений о бесполезности фреймворка, начались вокруг одного второстепенного метода smile

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


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


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

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



Цитата(cruelangel @  6.10.2007,  23:08 Найти цитируемый пост)
slice создаёт новый массив, каждый элемент которого ссылается на соответствующие значения исходного

Ну так и вложенным массивам - slice!

Цитата(cruelangel @  6.10.2007,  23:08 Найти цитируемый пост)
"дебильная" в моей фразе означает "неудобная и нелогичная"

Так и надо было сразу писать. И  не было бы претензий:
Цитата

ты слишком многого хочешь от альфа-версии

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

Цитата(cruelangel @  6.10.2007,  23:08 Найти цитируемый пост)
> не видит связи со своей любимой книжкой про С++

Видимо ниже этой цитаты я не раскрыл свою мысль до конца. Цитату привел как обобщение, характеризующее происходящее вокруг яваскрипт. А сама цитата действительно взята из темы, в которой народ упорно желал видеть в яваскрипт "Класс" и другие знакомые слова.

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

Я уже дал понять, вокруг чего и из-за чего начались "жаркие споры". Стало понятно это и Вам, раз Вы перефразировали написанное ранее. Не будь этого, мы бы с Вами уже продвинулись значительно дальше в глубь вашего сценария, забыв до бэты про этот второстепенный метод...

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


Опытный
**


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

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



боюсь претензии были бы в любом случае smile

обновил сабж. теперь $clone работает правильно.
PM MAIL   Вверх
AKS
Дата 7.10.2007, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(cruelangel @  7.10.2007,  14:01 Найти цитируемый пост)
боюсь претензии были бы в любом случае 

Не-а! С какой стати? Вопросы-расспросы, замечания-предложения - это возможно (если, конечно, моих, к примеру, знаний на это хватит). Но какие могут быть претензии?

Вот например, возвращаясь все к тому же $clone, могу сказать, что использование $each сильно тормозит процедуру клонирования. Если обходится простым присваиванием вместо вызова функции для каждого поля объекта, получится солидная экономия...

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


Опытный
**


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

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



> какие могут быть претензии?

уж не знаю.. это ты заговорил о притензиях - тебе виднее smile


> Если обходится простым присваиванием вместо вызова функции 

так и происходит при использовании одноуровневого клонирования $clone( false ).
PM MAIL   Вверх
cruelangel
Дата 7.10.2007, 20:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



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


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


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

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



Цитата(cruelangel @  7.10.2007,  19:55 Найти цитируемый пост)
так и происходит при использовании одноуровневого клонирования $clone( false ). 

Нет, все не так.
1. Метод $clone вызывает метод $each.
2. Метод $each на каждой итерации for in вызывает функцию.
3. Функция на каждой итерации вызывается в текущем контексте, используя для этого метод apply.
Все это происходит не зависимо от глубины клонирования. Именно эти три этапа я и предложил Вам заменить на один - операцию присваивания.
PM MAIL   Вверх
Zeroglif
Дата 8.10.2007, 12:04 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(cruelangel @  7.10.2007,  00:08 Найти цитируемый пост)
довольно странно, что столь жаркие споры, доходящие до утверждений о бесполезности фреймворка, начались вокруг одного второстепенного метода

Понимаешь, брать неоткоментированную либу и разбирать в ней каждую строчку - слишком жирно получится, достаточно уже посмотреть 2-3 куска, чтобы составить представление о качестве, несмотря даже на альфавость версии.  Ты вообще не контролируешь тип значений, переопределяшь зачем-то по кругу методы, несмотря на наследование, экстенсивно расширяешь нативные прототипы, что уже настораживает,  особенно в свете работы нескольких фреймворков рядом, переопределяешь ради "красоты" алерта важнейший метод toString, логика некоторых функций или отжигает, или несёт в себе неизвестный глубокий смысл и т.д. и т.п. На таком уровне развития imho этот фреймворк вряд ли будет кому-то сильно полезен. Доводи код до нужной кондиции и получишь тёплый приём.  smile 


Цитата(cruelangel @  7.10.2007,  15:01 Найти цитируемый пост)
обновил сабж. теперь $clone работает правильно

Не знаю, что на твоём языке означает "правильно", но метод $clone как работал никак, так и продолжает работать никак. При deep-клонировании объекты "подтипа" Function не отсекаются на подходе со всеми вытекающими последствиями, объекты "подтипов" Boolean, Number, String не клонируются (только копируется значение - ссылка на объект), про прочие "подтипы" пока ничего не слышно, значения null и undefined по какой-то причине за значения вообще не считаются и игнорируются (ничего себе клонирование), при нестрогом равенстве значения собственного свойства значению наследуемого свойства собственное свойство также игнорируется, оно же игнорируется и при нестрогом равенстве значению ненаследуемого свойства (например, для конструктор.prototype, хотя какая связь?), разреженный массив теряет значение  length оригинала, при клонировании объекта со свойством, значением которого является сам клонируемый объект, скрипт улетает в loooooooop...
PM MAIL WWW   Вверх
cruelangel
Дата 8.10.2007, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



AKS, не, я против такого размывания функционала: ручное итерирование в каждом методе лишь бы выиграть пару тактов процессора + необходимость перегружать соответствующие функции в потомках.
например, сейчас array от object отличается лишь способом итерирования (метод $each), остальные методы объекта используя этот метод работают и в массиве. при ручном итерировании в каждом методе, пришлось бы каждый метод объекта переписать и для массива.


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


Опытный
**


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

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



> брать неоткоментированную либу и разбирать в ней каждую строчку

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


> переопределяшь зачем-то по кругу методы, несмотря на наследование

уже нет


> экстенсивно расширяешь нативные прототипы, что уже настораживает

что в этом плохого?


> переопределяешь ради "красоты" алерта важнейший метод toString

ты так и не рассказал, почему его не стоит перегружать...


> несёт в себе неизвестный глубокий смысл

о каких функциях идёт речь?

> объекты "подтипов" Boolean, Number, String не клонируются
Код
var a= new Number( 5 );
a.b= 'qwe';
var c= a.$clone();
a.d= 'rty';
alert( [c, c.b, c.d] ); // [ 5, qwe ]



> значения null и undefined по какой-то причине за значения вообще не считаются и игнорируются

null и undefined - это отсутствие данных. незачем их "клонировать".


> при нестрогом равенстве значения собственного свойства значению наследуемого свойства собственное свойство также игнорируется

поправил, спасибо


> разреженный массив теряет значение  length оригинала, при клонировании объекта со свойством

всё правильно, length по логике должно быть равно количеству элементов, а не просто абстрактной "верхней границей".


> при клонировании объекта со свойством, значением которого является сам клонируемый объект, скрипт улетает в loooooooop

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


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


Опытный
**


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

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



Цитата(cruelangel @  8.10.2007,  13:32 Найти цитируемый пост)
прямо перед фразой на яваскрипт ту же самую фразу на английском - на мой взгляд достаточно глупо

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

Цитата(cruelangel @  8.10.2007,  13:32 Найти цитируемый пост)
что в этом плохого?

Для тебя может и ничего, для тех, кто ждёт от либы универсальности, неконфликтности, предсказуемости и простоты - ничего хорошего, вспоминая, что такое делегирование/наследование.

Цитата(cruelangel @  8.10.2007,  13:32 Найти цитируемый пост)
ты так и не рассказал, почему его не стоит перегружать...

Потому что его поведение предопределено, документировано и увязано со многими операциями, на этом программист может строить расчёт, а у тебя самодеятельность, начиная от того, что алерт пишет самопал, конвертация объектов самопальная и т.д. и т.п.

Цитата(cruelangel @  8.10.2007,  13:32 Найти цитируемый пост)
о каких функциях идёт речь?

Ну, допустим $proto $each $haskey $clone

Цитата(cruelangel @  8.10.2007,  13:32 Найти цитируемый пост)
alert( [c, c.b, c.d] ); // [ 5, qwe ]

Это ты написал сходу или протестировал, посмотри внимательнее на функцию и найди в ней создание нового объекта:

Код

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


Цитата(cruelangel @  8.10.2007,  13:32 Найти цитируемый пост)
null и undefined - это отсутствие данных. незачем их "клонировать".

Тогда и ноль туда же и пустую строку... весёлый клон получится, null часто используется для осознанного закрытия слота (подготовка под будущее объектное значение и т.п.), то есть null, как правило кладут со смыслом или DOM это возвращает, что тоже несёт смысл, а ты его отвергаешь, лишая объект свойства, заведомо существующего у оригинала.

Цитата(cruelangel @  8.10.2007,  13:32 Найти цитируемый пост)
всё правильно, length по логике должно быть равно количеству элементов

У javascript другая логика, свойство length может существовать как зависимо, так и независимо, а учитывая то, что само это свойство прямо влияет на массив, хорош будет тот клон с другой длиной. Остаётся только домыслить, как ты обрабатываешь массив и его клон в паре по единой логике, и что там можно наворотить...


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


Опытный
**


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

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



> Ты сейчас комментируешь свою либу, только уже здесь на форуме вроде "это здесь и не надо было", "тут так и задумано",

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


> для тех, кто ждёт от либы универсальности, неконфликтности, предсказуемости и простоты

опыт проторайпажс ико показывает, что это не вызывает проблем.


> этом программист может строить расчёт

что-то типа if( [1,2,3] == '1,2,3' ) ? smile


> $proto $each $haskey $clone

а из кода не очевидно что они делают? 


> Это ты написал сходу или протестировал, посмотри внимательнее на функцию и найди в ней создание нового объекта:

почисти кэш


> Тогда и ноль туда же и пустую строку...

нет, ноль, не смотря на одинаковое название, является числом, а пустая строка - строкой не содержащей символов. а вот null - это именно отсутствие данных. также как и undefined. просто в первом случае "данные были стёрты", а во втором "данные небыли внесены".
да, в каком-нибудь подтипе $haskey может быть перегружен в результате чего, например, пустая строка или числа меньше нуля не будут учавствовать в итерировании, гарантируя определённый вид данных передаваемых колбэку.


> то есть null, как правило кладут со смыслом

и этот смысл - стирание данных. нет смысла "отсутствию данных" учавствовать в итерировании.
Код
var a= [1,2,3,4];
a[2]= null;
var b= '';
for( var i=0; i<a.length; ++i ){
    b=+ a[i].toString();
}
alert( b );
 этот код выдаёт ошибку, потому, что для правильного итерирования разреженного массива нужно делать дополнительные проверки на отсутствие значения.


> как ты обрабатываешь массив и его клон в паре по единой логике, и что там можно наворотить

эт ты о чём?

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


Опытный
**


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

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



Цитата(cruelangel @  8.10.2007,  15:20 Найти цитируемый пост)
опыт проторайпажс ико показывает, что это не вызывает проблем

Не эталон. Скорее, наоборот. А приноровившись, можно и лампочку научиться вворачивать всем телом.

Цитата(cruelangel @  8.10.2007,  15:20 Найти цитируемый пост)
что-то типа if( [1,2,3] == '1,2,3' ) ? 

И это тоже...

Цитата(cruelangel @  8.10.2007,  15:20 Найти цитируемый пост)
а из кода не очевидно что они делают

Очевидно, что делают, местами не очевидно зачем они это делают.

Цитата(cruelangel @  8.10.2007,  15:20 Найти цитируемый пост)
почисти кэш

Мне не надо чистить кэш, я скачиваю скрипты и их тестирую/смотрю в редакторе, предпоследний был скачан после твоего первого и последнего уведомления об обновлении, дальше ты молчал, а перекачивать и diff-ить сорцы после каждого твоего поста - уволь. Захочешь - скажешь, что поменял.

Цитата(cruelangel @  8.10.2007,  15:20 Найти цитируемый пост)
null - это именно отсутствие данных. также как и undefined. просто в первом случае "данные были стёрты", а во втором "данные небыли внесены"

Да, на здоровье, просто выполняя одну задачу - клонирование, ты заодно выполняешь и другую задачу, не имеющую прямого отношения к клонированию - игнор свойств, которые ты считаешь, не содержащими данных, в процессе перечисления. В javascript-е и так практически невозможно клонировать объект, а если во время этой задачи ещё и как-то модифицировать результат, то на выходе будет что угодно, но только не клон. Дальний родственник из Семипалатинска. Метод стоит переназвать $cloneAndSomethingElse...

Цитата(cruelangel @  8.10.2007,  15:20 Найти цитируемый пост)
и этот смысл - стирание данных. нет смысла "отсутствию данных" учавствовать в итерировании

Итерируют не данные, а существующие свойства (которые не закрыты от этого процесса соответствующим атрибутом), какие там у свойств значения - не имеет значения. Кроме этого, роль собственных свойств (безотносительно значений) ещё и в том, что они перекрывают/затеняют одноимённые свойства прототипа:

Код

Array.prototype[3] = '666';
var a = [0,1,2];
a[3] = null;

var b = [];
for (var i = 0, l = a.length; i < l; i++) {
    if (a[i]!= null) {
        b[b.length] = a[i];
    }
}
alert(b[3]); //-> 666
alert(a[3]); //-> null


Цитата(cruelangel @  8.10.2007,  15:20 Найти цитируемый пост)
этот код выдаёт ошибку, потому, что для правильного итерирования разреженного массива нужно делать дополнительные проверки на отсутствие значения

Во-первых, toString там не нужен, во-вторых, ты там делаешь принудительную конвертацию в число с помошью плюса, сдаётся мне, что задумывалось другое, а оператор написан неправильно, в-третьих, вообще-то в javascript нужно частенько проверять тип значения, ничего тут странного нет, для этого не обязательно заранее готовить однородные структуры данных. 

Цитата(cruelangel @  8.10.2007,  15:20 Найти цитируемый пост)
эт ты о чём

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

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


Опытный
**


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

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



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

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


> ты заодно выполняешь и другую задачу, не имеющую прямого отношения к клонированию

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


> они перекрывают/затеняют одноимённые свойства прототипа

ок, убедил. null включаем в итерирование.


> Во-первых, toString там не нужен

во-первых вместо toString там может быть любой другой метод, не хотел усложнять код.


> Ну, представь, некую процедуру, где по определённым правилам обрабатывается массив, где важно свойство length

не могу себе такую представить. разве length используется ещё для чего-то кроме итерирования?


PM MAIL   Вверх
Zeroglif
Дата 8.10.2007, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(cruelangel @  8.10.2007,  16:43 Найти цитируемый пост)
твой ответ последовал через сутки

Ну, извини, не смог ежечасно сравнивать варианты скриптов (у меня уже 3 разных), в любом случае они все твои, обсуждение идёт не с потолка.  smile

Цитата(cruelangel @  8.10.2007,  16:43 Найти цитируемый пост)
автоматически получается "сжатым". 

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

Цитата(cruelangel @  8.10.2007,  16:43 Найти цитируемый пост)
не могу себе такую представить. разве length используется ещё для чего-то кроме итерирования

Даже выше постом в моём примере length используется для создания свойств массива b, к тому же length может удалять свойства ("...the length property is changed, every property whose name is an array index whose value is not smaller than the new length is automatically deleted"), это свойство важно, на нём играют.



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


Опытный
**


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

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



> в моём примере length используется для создания свойств массива b

такой кривой способ добавления элементов никак не конфликтует с моим с способом клонирования.


> length может удалять свойства

практика ничего подобного не подтверждает.

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


Опытный
**


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

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



в общем сделал клонирование массивов с сохранением ключей smile
это понадобилось для функции $combine (точнее не понадобилось, а могут возникнуть проблемы, если ей передать сжатый клон ) - что-то типа $map, но пробегает рекурсивно по всем объектам и все примитивные значения прогоняет через колбэк.
с помощью $combine, например, можно реализовать векторную арифметику:

Код
$alert( [ 1, '2', [ 3, 4, true, false, '5a' ] ].$combine( $number.$summ, [ 1, 2, 3 ] ) );


выведет:
Код
[ 2, 4, [ 6, 7, 4, 3, NaN ] ]


то есть:
Код
[ 1+1, 2+2, [ 3+3, 4+3, 1+3, 0+3, '5a'+3 ] ]


работает как с объектами, так и с массивами ( во втором параметре просто ищется поле с соответствующим ключом). вложенность не ограничена. примитивные объекты ( Number, String, Boolean ) ведут себя аналогично примитивным типам.

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

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


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

Репутация: нет
Всего: 78



вашу бы энергию, да в мирных целях..

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

не всё ли равно как там и что написано? я вот написал за посл время 2 довольно крупных проекта - smartselect и mashchat. оба они написаны совершенно по разному. один основан на Object.prototype, другой на Class.create() и Object.extend() из всем известной библиотеки. может кто-то скажет что одно правильно, может кто-то скажет, что другое. какая разница? и то и то прекрасно работает и имеет все необходимые пути для действий, возможно потребующихся в дальнейшем.

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

в итоге в голову приходит только одна пословица.. про танцора с ногами..

извиняюсь за оффтопик.


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


Опытный
**


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

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



есть два типа людей: создатели и потребители. и они никогда друг друга не поймут smile
всё началось с того, что я задумал написать "правильный" визивиг. в то время я программировал на практически голом яваскрипте. кода было много, отлаживать было сложно, работало так себе. потом я стал присматриваться к фреймворкам, но оказалось, что они для этих целей они совсем не предназначены. вообще, у меня сложилось такое впечатление, что единственной целью их создания является возможность создания домохозяйками "прикольных эффектов" и "очередных кривых виджетов".
PM MAIL   Вверх
Alx
Дата 12.10.2007, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

Репутация: нет
Всего: 78



Цитата(cruelangel @  12.10.2007,  16:15 Найти цитируемый пост)
есть два типа людей: создатели и потребители. и они никогда друг друга не поймут smile

создатель? мм) вот это круто ! smile и что же ты уже создал? просто интересно, можно в личку.

Цитата(cruelangel @  12.10.2007,  16:15 Найти цитируемый пост)
всё началось с того, что я задумал написать "правильный" визивиг. в то время я программировал на практически голом яваскрипте. кода было много, отлаживать было сложно, работало так себе. потом я стал присматриваться к фреймворкам, но оказалось, что они для этих целей они совсем не предназначены. вообще, у меня сложилось такое впечатление, что единственной целью их создания является возможность создания домохозяйками "прикольных эффектов" и "очередных кривых виджетов". 

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


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


Опытный
**


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

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



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

кроссбраузерная работа с выделениями, работа с dom-узлами без скатывания к многословному native-javascript и изобретения велосипеда ( например - treewalker )
PM MAIL   Вверх
Alx
Дата 12.10.2007, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

Репутация: нет
Всего: 78



cruelangel, мм, и что - есть успехи с реализацией 
Цитата(cruelangel @  12.10.2007,  16:38 Найти цитируемый пост)
кроссбраузерная работа с выделениями
 ?
чем не устраивает реализция работы с dom-узлами того же jquery, я не понимаю? возможностей куча. и летает так шопипец...

Добавлено через 5 минут и 4 секунды
просто пока в твоей либе я вижу только либо "по-другому прикрученные педали", либо какие-то совсем дикие 3 колеса..
функция date была бы полезна, если реализовать её как в PHP и в форме addon`а к jquery, а лучше - к prototype.


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


Опытный
**


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

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



> мм, и что - есть успехи с реализацией кроссбраузерная работа с выделениями?

есть небольшие. всё же лучше, чем ничего...


> чем не устраивает реализция работы с dom-узлами того же jquery, я не понимаю?

наверное тем, что там её нет. smile jquery умеет работать только с dom-элементами. для примера, скорми ей такой xpath путь //text() и посмотри, что она вернёт.


> функция date была бы полезна, если реализовать её как в PHP

это ужасная реализация. хотя, конечно, локали - вещь архинужная.
PM MAIL   Вверх
AKS
Дата 12.10.2007, 19:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Alx @  12.10.2007,  15:48 Найти цитируемый пост)
наблюдая за тем, сколько вы обсуждаете и перемалываете теорию, мне даже становится немного жаль вас

Напрасны ваши сантименты. ;)

Цитата(Alx @  12.10.2007,  15:48 Найти цитируемый пост)
потому что я не понимаю, как возможно ... успевать принимать участие... реальных проектах и получать удовольствие... от написания востребованных продуктов..

Вообще, любое непонимание зиждется на отсутствии необходимой информации. Но это не беда. Будет желание, будут возможности - и удастся узнать многое, и снизойдет божья благодать в виде вселенского понимания. smile

Цитата(Alx @  12.10.2007,  15:48 Найти цитируемый пост)
я вот написал за посл время 2 довольно крупных проекта - smartselect и mashchat. 

Поздравляю!

Цитата(Alx @  12.10.2007,  15:48 Найти цитируемый пост)
так зачем изобретать в миллионный раз очередной велосипед

Стандартный вопрос тех, кто использует сторонние разработки. Однако порой звучит довольно нелепо. Вот Вы, например, в самом деле считаете свои вышеупомянутые произведения уникальными?

Цитата(Alx @  12.10.2007,  15:48 Найти цитируемый пост)
тратя на изучение предыдущих (велосипедов) тонну времени

???

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


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

Репутация: нет
Всего: 78



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

cruelangel, вот это совсем другое дело. с удовольствием поддерживаю реализацию полной кроссбраузерной поддержки xpath!

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


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


Опытный
**


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

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



добавил работу с текстовыми диапазонами и выделением

Код
document.$observe( 'mouseup', function( ){ // on every mouseup
        var r1= $( 'foo' ).$range(); // create range for element
        var r2= $selection().$range(); // create range for selection
        $alert( r2.$contains( r1 ) ); // true if element completely selected
        $alert( r2.$concerns( r1 ) ); // true if element partial selected
        $alert( r2 ); // output selected html-fragment source
})


если $concerns и $contains окажется мало - всегда можно воспользоваться методом $compare. примеры его использования можно найти в коде.
новые диапазоны создаются с помощью функции $range().
выделение также поддерживает сохранение себя в ДОМ и восстановление по меткам. правда я эти функции ещё не тестировал на этом фреймворке...

ха-ха, общий непакованный объём уже под 25 кило и содержит 1200 строчек кода smile конец близок...

Это сообщение отредактировал(а) cruelangel - 14.10.2007, 01:25
PM MAIL   Вверх
02077461
Дата 3.1.2008, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

Репутация: нет
Всего: 0



Цитата(cruelangel @  8.10.2007,  12:32 Найти цитируемый пост)
> экстенсивно расширяешь нативные прототипы, что уже настораживает

что в этом плохого?

Вот тебе простейший пример, который начисто убил 40 минут моего времяни: 

Написал объект, который нес в себе массив, который в последствие посылался на сервер. Написан был год назад и работал как надо. Вот каково же было мое удивление, когда на сервер начала слаться в дополнение к нужной информации избыточная -- содержимое ф-ии. А дело было в следующем: нашел простой календарик (а-ля стаб) и использовал его. А в его коде через Array.prototype добавлялась ф-ия (имя не запомнил, т.к. потер сразу когда разобрался). Массив я пробегал через for (p in this.params), потому как имена ключей были именами переменных. И вот мне выдавалась лишняя пара: имя функции -> ее содержимое. 

Конечно, коды разные нужны, коды разные важны. Но у себя мы пришли к выводу, что использование внешних либ хорошо если речь идет только о визуализации (а-ля мутул и пр.). В остальном легче потратить время на написание НЕУНИВЕРСАЛЬНОГО, но заточенного под нашу задачу подхода. 

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


Бывалый
*


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

Репутация: нет
Всего: 0



Цитата(Alx @  12.10.2007,  20:24 Найти цитируемый пост)
smartselect - да, он уникален. откушу себе голову, если найдете достойного конкурента.

http://extjs.com/playpen/ext-2.0-dev5/exam...orm/combos.html

Видео с процессом лишения себя части тела прошу расшарить!
PM   Вверх
egao
Дата 3.1.2008, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



> Массив я пробегал через for (p in this.params), потому как имена ключей были именами переменных.

да, есть в яваскрипте такой баг. поэтому все фреймворки расширяющие прототипы кроме прочей требухи добавляют и метод итерирования.  у меня это - $each.


> В остальном легче потратить время на написание НЕУНИВЕРСАЛЬНОГО, но заточенного под нашу задачу подхода. 

проблема в том, что задачи постоянно меняются и переписывать код каждый раз задалбывает.
PM MAIL   Вверх
Alx
Дата 3.1.2008, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

Репутация: нет
Всего: 78



02077461, не грузится

Добавлено через 3 минуты и 29 секунд
ну да, хорошая реализация smile но функций все равно меньше smile


--------------------
PM MAIL WWW ICQ   Вверх
ksnk
Дата 4.1.2008, 08:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

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



02077461, На месте smartselect, перед тем как откусывать себе голову, я бы подумал - действительно ли + 200к на страницу - это "достойно" ;)
Ext - это хорошо для локалки и/или интранетных приложений, для интернета ext несколько, имхо, тяжеловат'с...

Это сообщение отредактировал(а) ksnk - 4.1.2008, 09:08


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Alx
Дата 5.1.2008, 02:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

Репутация: нет
Всего: 78



ksnk, да, кстати, что очень жаль.. :( я пару раз пытался тащить из неё компоненты, но все время получается от 200 к..


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


 




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


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

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