【问题标题】:Implementing onData in 'dart:html' dispatchEvent在 'dart:html' dispatchEvent 中实现 onData
【发布时间】:2014-04-21 16:19:09
【问题描述】:

我正在开发一个应用程序,但我注意到每个类都有很多与下面类中的 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) -> void 定义。鉴于 dispatchEvent 在 'dart:html' 包中,我不确定下一步该做什么。

【问题讨论】:

    标签: dart dart-polymer


    【解决方案1】:

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

    您可以将其实现为 mixin 以使其更易于重用。 示例见https://github.com/donny-dont/Pixelate/blob/master/lib/components/expander/expander.dart#L41ExpandableCustomizeable)。

    【讨论】:

    • 谢谢甘特。我来看看实现。
    猜你喜欢
    • 2019-01-18
    • 2017-11-11
    • 2014-09-10
    • 1970-01-01
    • 1970-01-01
    • 2020-11-24
    • 2020-12-26
    • 2014-08-23
    • 1970-01-01
    相关资源
    最近更新 更多