Вспоминается, что в эрланге такое было бы плевым делом. И хочется замутить что-такое и для AS. Что-то типа карты Матэ, но позволяющее разным swf обмениваться событиями точно также, как разные модули в одной swf.
Надо поискать, может есть где готовые JS мосты общего назначения для взаимодействия между swf
Поясню:
Сейчас
<fhc:IconButton id="help" width="50" height="50"
icon="{new HelpImg().bitmapData}"/>
Где HelpImg это BitmapAsset такого плана
package ... {
import mx.core.BitmapAsset;
[Embed(source='/icons/help.png')]
public class HelpImg extends BitmapAsset {
}
}
а IconButton имеет такую декларацию
[Style(name="icon", type="flash.display.BitmapData")]
Но при этом вылетают варнинги, что
[client] Data binding will not be able to detect assignments to "bitmapData".
И так везде. Как быть ?
Потом решил полистать исходники BitmapImage и обнаружил, что в Flex Hero 4.5.x ввели свойство contentLoader, в который передаётся имплементор IContentLoader ( в фреймворке flex это spark.core.ContentCache ).
То есть так
<s:BitmapImage contentLoader="instance of IContentLoader"
source="Image URL or URLRequest" />
Если не указывать contentLoader, то картинка будет грузиться каждый раз, как как создается BitmapImage. А так не будет, так как по URL ( который выступает в роли ключа в Dictionary ) будет доступно уже загруженное изображение
Удобно =)
Подробнее здесь:
opensource.adobe.com
opensource.adobe.com
Как то пару раз начинал и нелюбовь. Нарыл интересную тулзу ryanswanson.com
Видел еще подобную от скиннера в блоге Ильи Панина, но ссылку искать в лом.
// — API request result:
online=0
first_name=Ростислав
photo_big=http://cs9801.vkontakte.ru/u779920/a_f4145b06.jpg
last_name=Сирык
uid=779920
Показывает меня и одного Роста, эммм?
Почему дни — 1-based, а месяцы — 0-based? Почему блять геттер day — это день недели, а для дня месяца — геттер date?! Почему, ебаный в голову, дни — это day/date, месяцы — month, а год — это, пиздецнахуй, getFullYear?!?
Очень неприятно блять было убить два часа на поиски этой пойеботы
Респект
Хто бы тока знал, как я ржал :) Обычно это моя прерогатива была — писать им "Спасибо за наводку, пацаны, этого я не знал", а тут эвон как :)
По умолчанию оно закрывается по щелчку на Stage, но меня это не устраивает.
Ругалась вот на такой класс:
package org.as3yaml.nodes {
import org.as3yaml.Representer;
import org.as3yaml.YAMLNodeCreator;
import org.idmedia.as3commons.util.ArrayList;
public class VectorYAMLNodeCreator implements YAMLNodeCreator {
private var data : Vector.<*>;
public function VectorYAMLNodeCreator(data : Vector.<*>) {
this.data = data;
}
public function taguri() : String {
return "tag:yaml.org,2002:seq";
}
public function toYamlNode(representer : Representer) : Node {
var l : int = data.length;
var lst : ArrayList = new ArrayList();
for(var i:int=0; i<l; i++) {
lst.add( data[i] );
}
return representer.seq(taguri(), lst, false);
}
}
}
Исправил на:
package org.as3yaml.nodes {
import org.as3yaml.Representer;
import org.as3yaml.YAMLNodeCreator;
import org.idmedia.as3commons.util.ArrayList;
public class VectorYAMLNodeCreator implements YAMLNodeCreator {
public function taguri() : String {
return "";
}
public function toYamlNode(representer : Representer) : Node {
return new Node("",new Object());
}
Сравните:
private static var ...
private var ...
private var ...
private function ..
private function ..
private function ..
Или
static var ...
var ...
var ...
function ...
function ...
function ...
Для того чтобы добавить к разбору вышеперечисленные типы надо:
1) в файле Representer.as добавить внутренние классы ArrayCollectionYAMLNodeCreator и VectorYAMLNodeCreator ( например ), наследуемые от YAMLNodeCreator. Можно скопипастить их с ArrayYAMLNodeCreator =)
2) дальше описать метод toYamlNode ( кто будет делать, тот поймёт. Там минимальные отличия от такого же метода в ArrayYAMLNodeCreator )
3) включить в свитчилку метода getNodeCreatorFor
... else if(data is ArrayCollection) {
return new ArrayCollectionYAMLNodeCreator(data as ArrayCollection);
} else if(data is Vector.<*>) {
return new VectorYAMLNodeCreator(data as Vector.<*>);
} else ...
должно работать .)
some: !actionscript/object:Object
x: !!float 10
y: !!float 20
Тогда ремим строчку в class EmitterEnvironment в методе processTag:
if(preparedTag != null && "" != preparedTag) {
// emitter.writeIndicator(preparedTag,true,false,false);
}
Получаем такой вывод:
some:
x: 10
y: 20
вот так
Поскольку код сгенерирован из библиотеки jvyaml, а та сгенерирована с другой библиотеке, которая тоже ... , то в коде много артефактов:
--- такой
var start:int=0,ending:int=0;
while(ending < suffix.length) {
ending++;
}
if(start < ending) {
chunks += suffix.substring(start,ending);
}
--- или такой
public function representScalar(tag : String, value : String, style : String): Node {
var realStyle : String = style == '0' ? this.defaultStyle : style;
return new ScalarNode(tag,value,style);
}
таких мест немало. Навидался пока "пробегался" stepом =)
После дебага нашёл, в каком месте всё ломается:
class Emitter {
...
internal static function analyzeScalar(scalar : String) :ScalarAnalysis {
...
if(!(ceh == '\n' ||
('\u0020' <= ceh && ceh <= '\u007E') ) {
specialCharacters = true;
}
...
}
}
Добавляем проверку на русские символы, включая ё и Ё:
if(!(ceh == '\n' ||
('\u0020' <= ceh && ceh <= '\u007E') ||
('\u0410' <= ceh && ceh <= '\u044F' || ceh == '\u0401' || ceh == '\u0451' ) ) ) {
specialCharacters = true;
}
собственно это всё
class One extends Some
{
include "trait.as"
}
class Two extends Other
{
include "trait.as"
}
// trais.as
public function doSomething() : void
{
}
public function doSomethingElse() : void
{
}
Имеем два класса One и Two, не имеющие общего предка. Хотим добавить в оба класса идентичные методы. Получаем дублирование кода. Интерфейс? Интерфейс дает общий тип и не спасает от дублирования кода (кода еще больше). А мне не нужен общий тип, нужен общий код :)
И тут include спасает. Самое приятное, что IDEA вполне поддерживает такой код — навигация, автокомплиты и т.д.
Сча подробнее в блоге с более жизненным примером.
code.google.com ) мощен. Он мне только что расковырял динамически подгруженный модуль.
FlexSpy ( Параллельно с этими развлечениями проверяли сгенеренные amf-объекты в наколенном C#-парсере. Оказалось, что первый сериализатор кроме того, что иначе записывает массивы, так ещё и переворачивает порядок байт.. о_О норкотарий..
bytearray.org Thibault Imbert зарелизил первую главу новой книги: What can you do with bytes? Забрасываем худ. литературу, и начинаем вкуривать)
Внимание, рецепт: берем спрайт, готовый к скроллированию, с пририсованным баром. На баре ловим mouse_down, как только поймали — рисуем поверх всего-всего прозрачный спрайт размером с приложение и только на нем ловим mouse_up и mouse_leave. В этом случае никакие сраные врапперы нам не мешают, не перехватывают и т.д.
Лидером конешно же остаются матрицы — 910к юзерофф. Скоро мульен. Буду пить коньяк по этому поводу :)
#231936 — рецепт, как запускать тесты actionscript кода антом в комментах
по мотивам