javascript

Релиз Haxe 2.09

В субботу 14 апреля на конференции WWX в Париже Николя Канасье объявил о релизе новой версии Haxe 2.09

Отдельно отмечается, что начиная с этой версии, Haxe включает сервер компиляции. Это возможность для создателей IDE и плагинов, улучшить как скорость компиляции так и скорость автоматических подсказок при написании кода на Haxe. (подробнее)

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

  • новые пакеты sys.io и sys.net + класс высшего уровня Sys
  • Reflect.getProperty/setProperty
  • кроссплатформенные haxe.Json and haxe.Utf8
  • source mapping для отладки haxe->JS и --js-modern (подробнее о том, что такое source maps для html5)
  • поддержка Flash 11.2 and 11.3 + @:sound и @:file
  • серьезное улучшение скорости работы автодополнения
  • ... и другие изменения

Релиз haXe 2.08

Вышел haXe 2.08!
Это будет последний релиз в ветке 2.*. Следующий релиз, который пока планируется на весну 2012 будет уже называться haXe 3.0.

Что нового в haXe 2.08:

  • Серьезные улучшения в качестве получаемого js-кода в haxe -> JavaScript. (а для тех, кого и в нем что-то не устроит возможность написать собственный js-генератор с помощью макросов)
  • js.JQuery теперь стал частью стандартной библиотеки. С помощью нового тега метаданных @:overload в нем поддерживается полностью типизированный доступ.
  • весь новый API Flash Player 11 теперь доступен, с высокоуровневым haXe доступом к 3D шейдерам через HxSL а также теперь можно напрямую включать растровые изображения с помощью :
    @:bitmap("file.png") class File extends flash.display.BitmapData {}
  • два новых API для разработки на стороне сервера: URL Dispatcher и новая версия SPOD позволяющая напрямую писать SQL как haXe выражения (см. SPOD Macros)
  • множество улучшений в Макросах

NME 3 - теперь и HTML5

Начиная с сегодняшнего дня nme теперь поддерживает и html5(посредством jeash). Код пока доступен только через svn: http://code.google.com/p/nekonme/source/browse . По поводу релиза на haxelib пока неясно. По поводу объединения jeash и nme тоже пока неясно, хотя у них и одна база.

Для использования новой возможности используйте:
haxelib nme install html5

Динамические функции/методы

Кто-нибудь знает, почему "onmouseover" устанавливается только на последнем проходе этого цикла?

например, если я захожу в цикл "for (payment_id....." 3
раза - получаю 3 HtmlDom объекта типа "Link", каждый с прицепленным
к нему методом "onmouseover", так? Нет! :-) Только последняя (третья) ссылка
будет иметь работающий обработчик "onmouseover".

Такое впечатление что я создаю одну функцию вместо трёх. К сожалению, на этом
умные мысли заканчиваются :-). Что я уже только не пробовал! Уже 2 месяца с этим вожусь
без результата.

haXe/js Рисуем с библиотекой raphaelExtern

1) Вот тут нашел ссылку на библиотеку http://lib.haxe.org/p/raphaelExtern.
2) Установил haxelib install raphaelExtern
3) Cоздал haxe->js проект
4) Подключил библиотеку к проекту. Project/Properties/Compliler Options/Libraries/ добавил raphaelExtern
5) Написал код: (См. "How to use it" http://raphaeljs.com/ )

class Main
{
        static function main()
        {
                var paper = new Raphael(10, 50, 320, 200);

                // Creates circle at x = 50, y = 40, with radius 10
                var circle = paper.circle(50, 40, 10);
                // Sets the fill attribute of the circle to red (#f00)
                circle.attr("fill", "#f00");

                // Sets the stroke attribute of the circle to white
                circle.attr("stroke", "#fff");
        }
}

6) Всё скомпилировалось. При запуске через браузер вижу следующее:
"Raphael is not defined
Called from Main::main"

Баг в Haxe

Нашел один интиресный баг в haxe
main.hx:

import js.Dom;
import js.Lib;
import classes.DisplayObject;
/**
 * ...
 * @author Ekstazi
 */


class Main
{
        static var _logo:Dynamic= new DisplayObject('div');
       
        static function main()
        {
        }
}

displayobject.hx:
package classes;
import js.Dom;
//import js.HtmlDom;
import js.Lib;

class DisplayObject
{
        var obj:HtmlDom;
        public function new(name:Dynamic)
        {
                Lib.window.onload = function(e:Dynamic) {
                        Lib.window.alert(untyped __js__('typeof(name)'));
                }
                obj = Lib.document.createElement(name);
        }
       
        public function addChild(child:HtmlDom) {
                obj.appendChild(child);
                //obj.
        }
       
}

Вызывает ошибку, причина в том, что объявление статических переменных идет перед кодом:
js.Lib.document = document;
js.Lib.window = window;
js.Lib.onerror = null;

Влияние Haxe

Haxe->flash странно на меня подействовал, пишу на php - не в своей стихии, пишу на haxe->javascript - не хватает многих вещей которые были под флэш платформу. Например, нельзя просто взять и сделать lib.current.addChild(someObj), вместо этого:

package classes;
import js.Lib;
import js.Dom;

class Logo
{
        public var displayObj:HtmlDom;
        public function new()
        {
                displayObj = Lib.document.createElement('div');
        }
}

А потом в main:
lib.document.appendChild(logo.displayObj);

Кто-нибудь

Может кто нибудь подскажет мне как в haxe написать нечто подобное ?
Код Javascript:

function test(a){
  if (this instanceof test) this.init();
  else return new test(a);
}
this.prototype.init=function(){
   this.bla='trulala';
}

RSS-материал