2013-12-15 5 views
0

Нет, это не то же самое, что и у другого вопроса с тем же именем.Как вы взаимодействуете с js из дротика?

Есть, по-видимому, идентичные пакеты, которые, похоже, делают это, но с разными apis.

Почему существуют два?

Какой из них мы должны использовать?

Взаимодействие одно выглядит более новым и имеет лучшее api, но на самом деле не работает. Согласно документации, вы должны быть в состоянии преобразовать этот JavaScript:

var stage = new PIXI.Stage(0xFFFFFF);; 
renderer = PIXI.autoDetectRenderer(800, 600); 
document.body.appendChild(renderer.view); 

В:

var pixi = new js.Proxy(js.context.PIXI.Stage, 0xffffff); 
var renderer = js.context.PIXI.autoDetectRenderer(400, 400); 
document.body.append(renderer.view); 

Но ошибки при попытке скомпилировать:

dart2js 
Error occured:/Users/doug/megac/client/public/dart/index.dart:7:27: 
Warning: No member named 'PIXI' in class 'Proxy'. 
var pixi = new js.Proxy(js.context.PIXI.Stage, 0xffffff); 
^^^^^^^^^^^^^^^ 

Так .. js: дротик? Это то, что вы должны использовать?

Редактировать: Кстати, для тех, кто натыкается на это, есть также открытая ошибка http://code.google.com/p/dart/issues/detail?id=15795&thanks=15795&ts=1388068177 относительно того, как минимизированы операции по мостовому соединению dart-js в настоящий момент. Оригинальная проблема была сообщена в мае 2013 года, и с тех пор с ней не было никаких действий, поэтому не задерживайте дыхание.

+0

Последняя ошибка вы получаете, кажется, доказать, что вы забыли добавить '< script src = "pixi.js"> 'на вашей странице html. –

+0

nope. Это не так. Фактически, js.context ['PIXI'] ['Stage'] отлично работает, документация просто неверна. – Doug

+0

Хорошо, вы просто вводите в заблуждение API-интерфейсы [dart: js] (https://api.dartlang.org/docs/channels/stable/latest/dart_js.html) и [package: js] (http: // pub .dartlang.org/пакеты/JS). –

ответ

6

Js interop начато с package:js. Он был построен с window.postMessage.

Позже dart:js был добавлен, чтобы обеспечить лучшую производительность и уменьшить размер скомпилированного js-файла. В основном цель была:

  • удаления областей и обработки вручную жизненного цикла
  • избежать noSuchMethod сохранить размер компиляции как можно
  • переименования объектов, чтобы сделать апи более понятным

После дротика : js был готов, пакет: js был переписан для использования dart: js под обложкой.

пакет: JS обеспечивает более простую Апи, что достигается за счет увеличения размера Js (потому что пакет: JS использует дротик: зеркала и noSuchMethod).

Вот то же самое делается с пакета: JS и дротик: JS:

import 'package:js/js.dart' as js; 

main() { 
    var pixi = new js.Proxy(js.context.PIXI.Stage, 0xffffff); 
    var renderer = js.context.PIXI.autoDetectRenderer(400, 400); 
    document.body.append(renderer.view); 
} 

import 'dart:js' as js; 

main() { 
    var pixi = new js.JsObject(js.context['PIXI']['Stage'], [0xffffff]); 
    var renderer = js.context['PIXI'].callMethod('autoDetectRenderer', [400, 400]); 
    document.body.append(renderer['view']); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^