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

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

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

Регистрация: Apr 2014
Сообщений: 16
По умолчанию Аналог bind из javascript

Не пойму как сделать что-то подобное как в javascript

Код AS1/AS2:
someObject.someMethod((function() {
   this.doSomething();
}).bind(this));
знаю существуют apply и call но ведь они вызывают функцию сразу

Старый 14.11.2015, 19:26
СлаваRa вне форума Посмотреть профиль Отправить личное сообщение для СлаваRa Найти все сообщения от СлаваRa
  № 2  
Ответить с цитированием
СлаваRa
 
Аватар для СлаваRa

блогер
Регистрация: Feb 2008
Адрес: http://playtika.com
Сообщений: 1,119
Записей в блоге: 5
Отправить сообщение для СлаваRa с помощью ICQ Отправить сообщение для СлаваRa с помощью Skype™
Опишите, что вы хотите сделать на человекопонятном языке
__________________
местонахождение

Старый 14.11.2015, 19:36
bushstas вне форума Посмотреть профиль Отправить личное сообщение для bushstas Найти все сообщения от bushstas
  № 3  
Ответить с цитированием
bushstas

Регистрация: Apr 2014
Сообщений: 16
У меня есть класс Main, есть класс Page

у класса Main есть метод createView, в котором создается экземпляр класса Page, который должен загрузить необходимые для себя данные и выполнить полученный callback

Код AS1/AS2:
private function createView(viewName:String):Component {
     var view = new Page();
     view.load(function() {
          this.addChild(view, viewName);	
     });
     return view;
}
Метод load у класса Page
Код AS1/AS2:
public function load(callback) {
	DataLoader.load('getPageData', function() {
		callback();
	});
}
так вот мне нужно чтобы внутри функции callback был нужный контекст, думается мне что нужно его передавать вторым аргументом и делать apply

Добавлено через 10 минут
Есть идея сделать что-то типа того:

Оба этих класса унаследованы от класса Component

Написать ему метод bind

Код AS1/AS2:
protected function bind(callback) {
     var self = this;
     return function() {
          callback.apply(self);
     }
}
что-то типа того

и использовать

Код AS1/AS2:
private function createView(viewName:String):Component {
     var view = new Page();
     var cb = this.bind(function() {
          this.addChild(view, viewName);	
     });
     view.load(cb);
     return view;
}


Последний раз редактировалось bushstas; 14.11.2015 в 19:47.
Старый 14.11.2015, 20:14
СлаваRa вне форума Посмотреть профиль Отправить личное сообщение для СлаваRa Найти все сообщения от СлаваRa
  № 4  
Ответить с цитированием
СлаваRa
 
Аватар для СлаваRa

блогер
Регистрация: Feb 2008
Адрес: http://playtika.com
Сообщений: 1,119
Записей в блоге: 5
Отправить сообщение для СлаваRa с помощью ICQ Отправить сообщение для СлаваRa с помощью Skype™
Я советую прочитать вам про событийную модель.
И стараться не использовать большое кол-во анонимных функций, как в js, это тот путь, который создаст вам больше проблем, чем принесет пользы.
__________________
местонахождение

Старый 14.11.2015, 20:17
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 5  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
В as3 так не делают. Здесь есть события. Создаем кастомное событие, посылаем его из нужного объекта, и где необходимо подписываем к этом объекту слушатель данного события. Это и создаст необходимый контекст.

Хотя можно и в apply / call толкнуть вторым аргументом, если сильно надо)

Старый 14.11.2015, 20:28
bushstas вне форума Посмотреть профиль Отправить личное сообщение для bushstas Найти все сообщения от bushstas
  № 6  
Ответить с цитированием
bushstas

Регистрация: Apr 2014
Сообщений: 16
ну так и в JS есть кастомные события, хотелось бы без них, что нет бинда понятно, и почему так не делают??? кто это сказал?)))

Добавлено через 15 минут
Кастомные события только сцена может диспатчить? Или на что-то еще можно их повесить?

Старый 14.11.2015, 20:58
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 7  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Цитата:
и почему так не делают??? кто это сказал?)))
Делать то можно, но делегирование было актуально во время as2, в as3 нет такой необходимости в контексте вашей задачи.

Цитата:
Кастомные события только сцена может диспатчить? Или на что-то еще можно их повесить?
Любой flash.events.EventDisplatcher может их диспатчить.

Старый 14.11.2015, 21:03
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 8  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Сообщение от bushstas Посмотреть сообщение
и почему так не делают??? кто это сказал?)))
Я. Как человек, занимающийся пграммированием на as3 уже 6 лет, постоянно пишуший свои и читающий чужие коды, говорю, что так не делают (или делают, но очень редко). Не потому, что это невозможно, а потому что это не удобно в as3 и необходимости делать именно так, нет.
Но, еще раз повторю, если очень хочется, то можно отправить в apply / call вторым аргументом. В чем проблема-то? Точного аналога JS'овского bind() в as3 не существует.

Старый 14.11.2015, 21:10
bushstas вне форума Посмотреть профиль Отправить личное сообщение для bushstas Найти все сообщения от bushstas
  № 9  
Ответить с цитированием
bushstas

Регистрация: Apr 2014
Сообщений: 16
никакой проблемы, просто хотел узнать есть ли что-то подходящее без использования костылей, все объяснили, спасибо, буду впихивать в свои представления об ООП события

PS хотя bind наверное и есть сам по себе костыль

Старый 14.11.2015, 21:13
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 10  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
PS хотя bind наверное и есть сам по себе костыль
В JS наверное нет. Но тут классы, концепция не совсем такая все-таки.

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

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

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


 


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


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