在'dart:html'dispatchEvent中实现数据

时间:2014-04-21 16:19:09

标签: dart dart-polymer

我正在开发一个应用程序但是我注意到每个类都有很多类似于下面类中addRace方法的代码:

@CustomTag( 'race-view' )
class RaceViewForm extends PolymerElement
{
  RaceViewForm.created() : super.created();

  void addRace( Event e, var detail, Element target )
  {
     var raceElem = $['race'];

    if( raceElem.children.length < 1 )
    {
      raceElem.children.add( new Element.tag( 'race-form' ) );
    }

    raceElem.on[ DELETE_BUTTON_FORM_EVENT ]
            .listen( (Event e)
                {
                   (e.target as Element).remove();
                   dispatchEvent( new CustomEvent( RACE_VIEW_EVENT, detail:new Race() ));
                });

  }

}

我试图通过以下重构将重复代码移动到名为shared.dart的库中:

  import 'dart:html';
  import 'package:observe/observe.dart';
  ...

  void addForm( Element target, String eventName, String dispatchEventName, dynamic instance )
  {
    var element = target;

    if( element.children.length < 1 )
    {
      element.children.add( new Element.tag( 'race-form' ) );
    }

    element.on[ eventName ]
            .listen( (Event e)
                {
                   (e.target as Element).remove();
                  dispatchEvent( new CustomEvent( dispatchEventName, detail:instance ));
                });

  }

但是,dart IDE将addForm方法中的dispatchEvent方法标记为未使用参数onData(dynamic)定义 - &gt;无效。鉴于dispatchEvent位于&#39; dart:html&#39;包裹,我不确定下一步该做什么。谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

我在dispatchEvent()(顶级)中找不到dart:html仅作为Node类的方法。您需要将Polymer元素实例传递给库方法。

您可以将其实现为mixin,以便于重用。 有关示例,请参阅https://github.com/donny-dont/Pixelate/blob/master/lib/components/expander/expander.dart#L41ExpandableCustomizeable)。