Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Архив Flasher.ru > Flash > ActionScript

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 24.04.2002, 12:40
SPV вне форума Посмотреть профиль Отправить личное сообщение для SPV Найти все сообщения от SPV
  № 11  
SPV
 
Аватар для SPV

Регистрация: Jan 2000
Адрес: St-Petersburg
Сообщений: 1,229
Отправить сообщение для SPV с помощью ICQ
2Nox Noctis
Извиняюсь, просто не тот код вставил Я отвечал на
Цитата:
придется для сортировки по каждому из полей писать сортировочную функцию.... или придумать что-нибудь хитрецкое....
Код:
function orderBy (field) {
   fld = field;
   order = function(a, b) {
      v1 = Number(a[fld]);
      v2 = Number(b[fld]);
      if (v1 < v2) {
        return -1;
      } else if (v1 > v2) {
        return 1;
      } else {
        return 0;
      }
   }
   return order;
 }

function retrace (what) {
	trace ("");
	for (var i = 0; i<what.length; i++) {
		trace (i+" :: "+"{x: "+what[i].x+" ; y: "+what[i].y+"}");
	}
}
// 
test = [{x:150, y:20}, {x:50, y:30}, {x:200, y:10}, {x:10, y:60}, {x:100, y:50}];
// 
retrace(test);
test.sort(orderBy("x"));
retrace(test);
__________________
Two beer or not two beer?...


Последний раз редактировалось SPV; 24.04.2002 в 12:47.
Старый 24.04.2002, 17:41
Nox Noctis вне форума Посмотреть профиль Отправить личное сообщение для Nox Noctis Посетить домашнюю страницу Nox Noctis Найти все сообщения от Nox Noctis
  № 12  
Nox Noctis
don't panic!
 
Аватар для Nox Noctis

Регистрация: Aug 2001
Сообщений: 4,121
мм...
хорошо, про динамическое создание функции я все понял... спасибо john'у и SPV...
остается только постучать головой обо что нибудь твердое и поудивляться как я сам не догадался... :)))


а теперь полюбуйтесь до чего дошел мой маразм вчера вечером :D
сортировка массива объектов-точек со свойствами икс и игрек:
Код:
_global.fakeArray = function(victim) {
	var forgery = [], mold = "000";
	for (var i = 0; i<victim.length; i++) {
		forgery.push({});
		forgery[i].x = mold.substr(0, 3-String(victim[i].x).length)+victim[i].x;
		forgery[i].y = mold.substr(0, 3-String(victim[i].y).length)+victim[i].y;
	}
	return forgery;
};
_global.exposeArray = function(victim) {
	var truth = [], rank;
	for (var i = 0; i<victim.length; i++) {
		truth.push({});
		rank = (victim[i].x.charAt(0) == "0") ? ((victim[i].x.charAt(1) == "0") ? (2) : (1)) : (0);
		truth[i].x = Number(victim[i].x.substr(rank));
		rank = (victim[i].y.charAt(0) == "0") ? ((victim[i].y.charAt(1) == "0") ? (2) : (1)) : (0);
		truth[i].y = Number(victim[i].y.substr(rank));
	}
	return truth;
};
function sortByField(source, fieldName) {
	var fake = fakeArray(source);
	fake.sortOn(fieldName);
	var real = exposeArray(fake);
	return real;
}
//
test = [{x:600, y:20}, {x:500, y:20}, {x:0, y:20}, {x:300, y:20}, {x:100, y:20}, {x:400, y:20}, {x:200, y:20}];
test = sortByField(test, "x");
ага, я знаю, что случай тяжелый :))

...правда по большей части я это лепил из спортивного интереса :D


Последний раз редактировалось Nox Noctis; 24.04.2002 в 17:44.
Старый 25.04.2002, 21:28
Nox Noctis вне форума Посмотреть профиль Отправить личное сообщение для Nox Noctis Посетить домашнюю страницу Nox Noctis Найти все сообщения от Nox Noctis
  № 13  
Nox Noctis
don't panic!
 
Аватар для Nox Noctis

Регистрация: Aug 2001
Сообщений: 4,121
2john
....
var param = arguments.callee.param;
...и потом
sortOn_function.param = param;
...

эээ.... это ты что имел в виду ? :)))

если верить хэлпу, то arguments.callee - это ссылка на текущую вызванную функцию... и взятие у этой ссылки свойств есть нечто весьма странное...

к тому же эти строчки совсем не нужны (да они и не действуют на самом деле) - все равно в качестве имени поля подставится то, которое передано во внешнюю функцию...

Старый 25.04.2002, 21:51
john вне форума Посмотреть профиль Отправить личное сообщение для john Посетить домашнюю страницу john Найти все сообщения от john
  № 14  
john
МЕГАФЛЭШЕР

Регистрация: May 1999
Адрес: Россия, Москва
Сообщений: 1,181
Цитата:
к тому же эти строчки совсем не нужны (да они и не действуют на самом деле) - все равно в качестве имени поля подставится то, которое передано во внешнюю функцию...
А ты уверен?
какая внешняя функция,
если только обявлять параметр глобально как сдалал уважаемый SPV, то конечно будет видно, но если делать нормально, то функция (Array.sort) уже рутовая функция, и к локальным переменным первой фунции уже доступа не имеет.

Код:
Array.prototype.sortOnNum = function(param)
{
	var sortOn_function = function(a,b)
	{
		trace(param) 

		a = Number(a[param]);
		b = Number(b[param]);
		return (a<b)*-1||(a>b)*1||0;
	}
	
	this.sort(sortOn_function);
}

test = [{x:600, y:20}, {x:500, y:20}, {x:0, y:20}, {x:300, y:20}, {x:100, y:20}, {x:400, y:20}, {x:200, y:20}];
test.sortOnNum()
даже если так:


Код:
Array.prototype.sortOnNum = function(p )
{
	var param = p; 

	var sortOn_function = function(a,b)
	{
		trace(param) 
		a = Number(a[param]);
		b = Number(b[param]);
		return (a<b)*-1||(a>b)*1||0;
	}
	
	this.sort(sortOn_function);
}

test = [{x:600, y:20}, {x:500, y:20}, {x:0, y:20}, {x:300, y:20}, {x:100, y:20}, {x:400, y:20}, {x:200, y:20}];
test.sortOnNum()

test = [{x:600, y:20}, {x:500, y:20}, {x:0, y:20}, {x:300, y:20}, {x:100, y:20}, {x:400, y:20}, {x:200, y:20}];
test.sortOnNum()
Синтаксис вполне корректный и регулярно используемый(мной),
Нет все вполне логично, и параметры в теле функции можно хранить вполне.

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


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


Последний раз редактировалось john; 25.04.2002 в 21:53.
Старый 25.04.2002, 22:02
Nox Noctis вне форума Посмотреть профиль Отправить личное сообщение для Nox Noctis Посетить домашнюю страницу Nox Noctis Найти все сообщения от Nox Noctis
  № 15  
Nox Noctis
don't panic!
 
Аватар для Nox Noctis

Регистрация: Aug 2001
Сообщений: 4,121
Цитата:
кстати ты интересовался как то о использовании регистер класс без мувиков,
увидел я такое, и понял для чего, могу показать
НЕТ :))) и видеть не желаю ! никому не показывай ! ни-за-что :)))))))))))))


насчет функции и параметров:
в своей первой функции после указанных в моем предыдущем сообщении строчек трейс поставь ;))

когда пишем, например:
function test(param1, param2) {
var internal = {a:param1, b:param2};
return internal;
}

ничего не смущает, правда ?

ну так с созданием функции _то же самое_

поправь меня, если я неправильно понял, но в твоем первом коде ты почему-то посчитал, что переменная 'param' в строках
a = Number(a[param]);
b = Number(b[param]);

будет подставляться во время выполнения функции 'sortOn_function'... но это ведь не так ! :)) ее значение встанет внутрь квдратных скобок уже во время создания функции, а при вызове это будет все равно что непеременное имя поля :D


Последний раз редактировалось Nox Noctis; 25.04.2002 в 22:09.
Старый 25.04.2002, 22:06
john вне форума Посмотреть профиль Отправить личное сообщение для john Посетить домашнюю страницу john Найти все сообщения от john
  № 16  
john
МЕГАФЛЭШЕР

Регистрация: May 1999
Адрес: Россия, Москва
Сообщений: 1,181
да видит... ну фик с ним,
вообще для меня это нарушение логики,
поидее функция должна иметь свое локальное пространство для переменных нечего использовать чужие,
так для меня понятнее и надежнее,


Код:
Array.prototype.sortOnNum = function(param)
{
	var sortOn_function = function(a,b)
	{
		trace(arguments.callee.param)
		var p = arguments.callee.param;
		a = Number(a[p]);
		b = Number(b[p]);
		return (a<b)*-1||(a>b)*1||0;
	}
	
	sortOn_function.param = param;
	this.sort(sortOn_function);
}


test = [{x:600, y:20}, {x:500, y:20}, {x:0, y:20}, {x:300, y:20}, {x:100, y:20}, {x:400, y:20}, {x:200, y:20}];
test.sortOnNum("x")

Старый 25.04.2002, 22:10
john вне форума Посмотреть профиль Отправить личное сообщение для john Посетить домашнюю страницу john Найти все сообщения от john
  № 17  
john
МЕГАФЛЭШЕР

Регистрация: May 1999
Адрес: Россия, Москва
Сообщений: 1,181
Цитата:
будет подставляться во время выполнения функции 'sortOn_function'... но это ведь не так ! ) ее значение встанет внутрь квдратных скобок уже во время создания функции, а при вызове это будет все равно что непеременное имя поля

ну не знаю, помоему ты перемудрил,

Старый 25.04.2002, 22:19
Nox Noctis вне форума Посмотреть профиль Отправить личное сообщение для Nox Noctis Посетить домашнюю страницу Nox Noctis Найти все сообщения от Nox Noctis
  № 18  
Nox Noctis
don't panic!
 
Аватар для Nox Noctis

Регистрация: Aug 2001
Сообщений: 4,121
ничего я не перемудрил... :))
ну, может сказал коряво - эт да :))

я имел в виду, что
после создания функции выражением
var sortOn_function = function(a,b) { ///////// }
где внутри фигурных скобок используется идентификатор 'param',
она будет иметь вид как будто мы написали просто:
Код:
var sortOn_function = function (a, b) {
	a = Number(a["........."]);
	b = Number(b["........."]);
	return (a<b)*-1 || (a>b)*1 || 0;
};
то есть УЖЕ со строковыми значениями в качестве имени поля :)

...ладно, с этим все понятно :)


так что там с Обджект.регистерКлассом без клипов ? :))


Последний раз редактировалось Nox Noctis; 25.04.2002 в 22:21.
Старый 25.04.2002, 22:25
john вне форума Посмотреть профиль Отправить личное сообщение для john Посетить домашнюю страницу john Найти все сообщения от john
  № 19  
john
МЕГАФЛЭШЕР

Регистрация: May 1999
Адрес: Россия, Москва
Сообщений: 1,181
вообще может быть и так.... не знаю,
если так то конечно здорово, но как можно это утверждать на сто процентов?

то есть получается что я буду заводить функцию и вызов из нее будет происходить при ее инициализации,

то есть например:


Код:
function foo () {
	var a_foo = function  () {
		[root_trace(1)]
	}
}

function root_trace (msg) {
	trace(msg)
	return "str"
}

foo();
что статичные данные а что динамичные,
тогда почему парам то статичный?

и еще пример из той же оперы
при создании объектa,
присвоение значения при создании вполне оправдано..

Код:
function root_trace (msg) {
	trace(msg)
	return "str"
}

o = {param:root_trace(1)}

Старый 25.04.2002, 22:29
john вне форума Посмотреть профиль Отправить личное сообщение для john Посетить домашнюю страницу john Найти все сообщения от john
  № 20  
john
МЕГАФЛЭШЕР

Регистрация: May 1999
Адрес: Россия, Москва
Сообщений: 1,181
да, закроем тему,


далее регистер класс,

кодик с комментариями,

регистрируются класс, идентификатора в библиотеки такого нет...

Код:
// -----------------------------------------------------------------
// NetServiceProxyResponder
// This is the automatically-generated responder object that is used
// when a service is called and no responder object was given.
// -----------------------------------------------------------------

_global.NetServiceProxyResponder = function(service, methodName)
{
	//trace("NetServiceProxyResponder(" + service + "," + methodName + ")");
	this.service = service;
	this.methodName = methodName;
}

// This function gets called whenever an onResult is received from the server
// as a result of a call that is being handled by our responder object.
NetServiceProxyResponder.prototype.onResult = function(result)
{
	//trace("NetServiceProxyResponder.onResult(" + result + ")");
	var client = this.service.client;

	// tell the result object what service it came from, if it wants to know.
	// (this call usually has no effect, except for NetServiceProxy and RecordSet).
	result._setParentService(this.service);

	var func = this.methodName + "_Result";
	if (typeof(client[func]) == "function")
	{
		// there is an "xxx_Result" method supplied - call it.
		client[func](result);
	}
	else if (typeof(client.onResult) == "function")
	{
		// there is an "onResult" method supplied - call it.
		client.onResult(result);
	}
	else
	{
		// nobody to call. Dump something to the output window.
		NetServices.trace("NetServices", "info", 1, func + " was received from server: " + result);
	}
}

// This function gets called whenever an onStatus is received from the server
// as a result of a call that is being handled by our responder object.
NetServiceProxyResponder.prototype.onStatus = function(result)
{
	//trace("NetServiceProxyResponder.onStatus(" + objectToString(result) + ")");
	var client = this.service.client;

	var func = this.methodName + "_Status";
	if (typeof(client[func]) == "function")
	{
		// there is an "xxx_Status" method supplied - call it.
		client[func](result);
	}
	else if (typeof(client.onStatus) == "function")
	{
		// there is an "onStatus" method supplied - call it.
		client.onStatus(result);
	}
	else if (typeof(_root.onStatus) == "function")
	{
		// there is an "onStatus" method at the root level - call it.
		_root.onStatus(result);
	}
	else if (typeof(_global.System.onStatus) == "function")
	{
		// there is an "onStatus" method at the global level - call it.
		_global.System.onStatus(result);
	}
	else
	{
		// nobody to call. Dump something to the output window.
		NetServices.trace("NetServices", "info", 2, func + " was received from server: " + result.class + " " + result.description);
	}
}


// -----------------------------------------------------------------
// NetServiceProxy
// -----------------------------------------------------------------

// Ensure that NetServiceProxy objects received via AMF messages get
// correctly deserialized into actionscript objects.
Object.registerClass("NetServiceProxy", NetServiceProxy);

Создать новую тему   Часовой пояс GMT +4, время: 02:41.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 02:41.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.