Перетащите в Chrome с помощью кода Dart JS [Ошибка: версия 35.0.1916.114 m] [OK: версия 34.0.1847.137 m]

Получение этой ошибки после обновления Chrome с версии 34.0.1847.137 m до 35.0.1916.114 m. Нет проблем с запуском Dart-Code непосредственно в Chromium. Проблема возникает после сборки на JS.

NoSuchMethodError : method not found: 'Symbol("effectAllowed=")'
Receiver: Instance of 'UnknownJavaScriptObject'
Arguments: ["move"]

STACKTRACE:
Error
    at dart.wrapException (http://127.0.0.1:4031/main.dart.js:3295:15)
    at UnknownJavaScriptObject.Interceptor.noSuchMethod$1 (http://127.0.0.1:4031/main.dart.js:362:15)
    at UnknownJavaScriptObject.Object.set$effectAllowed (http://127.0.0.1:4031/main.dart.js:67163:19)
    at dart.J.set$effectAllowed$x (http://127.0.0.1:4031/main.dart.js:124901:39)
    at _installDraggable_closure0.call$1 (http://127.0.0.1:4031/main.dart.js:115318:9)
    at _rootRunUnary (http://127.0.0.1:4031/main.dart.js:27280:14)
    at _ZoneDelegate.runUnary$3 (http://127.0.0.1:4031/main.dart.js:33193:58)
    at VmTurnZone__onRunUnary_closure.call$0 (http://127.0.0.1:4031/main.dart.js:14287:30)
    at VmTurnZone._onRunBase$4 (http://127.0.0.1:4031/main.dart.js:14155:17)
    at VmTurnZone._onRunUnary$5 (http://127.0.0.1:4031/main.dart.js:14176:19) 

После обновления функция перетаскивания нашего кода больше не работает в JS. Мы используем следующую библиотеку перетаскивания: https://github.com/marcojakob/dart-html5-dnd

Мы используем следующий декоратор:

@Decorator(
    selector: '[xpDrag]'
  )
class XpDrag{
  static final DragHandler dh = new DragHandler();
  dom.Element element;
  var mouse_down;
  var mouse_up;

  XpDrag(this.element){
    dh.dragGroup.install(element);  
    mouse_down = element.onMouseDown.listen((e)=>dh.startDrag(e));

  }
}  

И эти прослушиватели событий:

class DragHandler{
  static final DragHandler _singelton = new DragHandler._internal();
  dnd.DraggableGroup dragGroup = new dnd.DraggableGroup();
  dnd.DropzoneGroup dropGroup = new dnd.DropzoneGroup();
  bool listenerRegistered = false;

  DragHandler._internal(){   
    // dragGroup
    dragGroup.dropEffect = dnd.DROP_EFFECT_MOVE;
    // dropGroup
    dropGroup.install(querySelector('#stage'));
    dropGroup.accept.add(dragGroup);   
  }

  factory DragHandler(){
    return _singelton;
  }

  void startDrag(Event ele){ 

    if(!listenerRegistered){
      listenerRegistered = true;

      dragGroup.onDragStart.listen((dnd.DraggableEvent event){ 
        event.draggable.classes.add('dragiconCut');
      });

      dragGroup.onDragEnd.listen((dnd.DraggableEvent event){ 
        event.draggable.classes.remove('dragiconCut');
      });

      ... 

      dropGroup.onDrop.listen((dnd.DropzoneEvent event) {
        createNewDragElement(event.draggable.getAttribute("id"), event.mouseClientPosition);
      }); 
     }
  }

У кого-то такая же проблема? Или знает решение? Спасибо.


person Ironori    schedule 22.05.2014    source источник
comment
Я бы зарегистрировал ошибку на dartbug.com   -  person Günter Zöchbauer    schedule 22.05.2014
comment
Пытаясь воспроизвести проблему с помощью примера из github.com/marcojakob/ dart-html5-dnd/tree/master/example Я не получаю ошибку. Похоже, мне нужно сначала снова проверить наш код. Спасибо   -  person Ironori    schedule 23.05.2014


Ответы (1)


Мы выяснили, что проблема возникает из-за начальной загрузки Angular в Dart. Проблема возникает только в Google Chrome версии 35.0.1916.114 m (не в FF, IE, Safari, Chrome версии 34.0.1847.137 m).

ДАРТ-КОД

import 'dart:html';
import 'package:angular/angular.dart';
import 'package:html5_dnd/html5_dnd.dart' as dnd;
import 'package:angular/application_factory.dart';

void main() {
  //applicationFactory().addModule(new createModule());    ---> Doesn't work if not commented out

  DragHandler dh = new DragHandler();
  querySelectorAll('.dragEle').onDragStart.listen((event){
    print("drag");
  });

}

class createModule extends Module {
  createModule(){}
}

class DragHandler{
  dnd.DraggableGroup dragGroup = new dnd.DraggableGroup();
  dnd.DropzoneGroup dropGroup = new dnd.DropzoneGroup();  

  DragHandler(){
    // dragGroup
    dragGroup.installAll(querySelectorAll('.dragEle'));

    // dropGroup
    dropGroup.install(querySelector('#drop'));
    dropGroup.accept.add(dragGroup);   
  }
}

HTML-КОД

<!DOCTYPE html>

<html>
  <head>
    <meta charset="utf-8">
    <title>DndTest</title>
    <link rel="stylesheet" href="dndtest.css">
  </head>
  <body>
    <h1>DndTest</h1>

    <p>Hello world from Dart!</p>

    <div id="drag1" class="dragEle" style="left: 100px; top: 100px; height: 100px; width: 100px; position: absolute; background-color: lime;">drag1</div>
    <div id="drag2" class="dragEle" style="left: 300px; top: 100px; height: 100px; width: 100px; position: absolute; background-color: lime;">drag2</div>

    <div id="drop" style="left: 200px; top: 300px; height: 100px; width: 100px; position: absolute; background-color: maroon;">drop</div>

    <script type="application/dart" src="dndtest.dart"></script>
    <script src="packages/browser/dart.js"></script>
  </body>
</html>
person Ironori    schedule 23.05.2014
comment
Вы где-то писали об ошибке? Было бы здорово, если бы вы добавили ссылку на тему! - person Günter Zöchbauer; 23.05.2014