【问题标题】:Get a StreamSubscription from an on-* attribute in dart从 dart 中的 on-* 属性获取 StreamSubscription
【发布时间】:2015-02-16 08:36:49
【问题描述】:

在我的自定义元素中,我有一些元素,它们具有“输入”属性。它们都调用相同的函数。因此,在输入元素的每次更改时,都会调用该函数。但我想从第一个事件中获取 StreamSubscription,如果函数完成,暂停它并重新启动它。

那么有没有办法从 'on-*' 属性中获取 StreamSubscription 呢?

从 Dart 代码中设置 onInput 事件不是一个选项。

【问题讨论】:

    标签: events dart


    【解决方案1】:

    如果您强制添加事件侦听器,这正是您所得到的。

    $['my-input'].onXxx.listen...
    

    $['my-input'].on['Xxx'].listen...
    

    请阅读您的最后一句话。为什么它不是一个选项?

    您可以创建自己的 StreamController 并将事件添加到声明式分配的事件处理程序中。

      StreamController<Event> _inputController = new StreamController<Event>();
      Stream<Event> get onInput => _inputController.stream;
    
      void inputHandler(Event e) {
        _inputController.add(e);
      }
    

    如果需要,您可以将onInput 设为广播流

    Stream<Event> _inputStream = _exitController.stream.asBroadcastStream();
    
    ...
    
    // subscribe to the event
    onInput.listen...
    

    但是这样你得到的基本上和你直接使用上面显示的元素的事件流一样。

    【讨论】:

    • 就像我在问题中所说,强制设置事件侦听器对我来说不是选项,是这种情况..
    • 对不起,一开始我错过了你的最后一句话。我已经更新了我的答案。如果您能解释此要求的意义何在,将会有所帮助。
    • 由于我的元素包含各种输入元素/自定义输入元素,这些元素将根据我的自定义元素的类型显示。 (使用模板)。这些元素有不同的事件。有些有输入,有些没有。因此,将每个元素上的事件设置为属性要容易得多,而不是使用大量的 if 来查看在这种情况下我得到了哪个元素并通过 dart 代码设置事件。
    • 您可以添加自定义属性并在代码中进行链接。 querySelectorAll([custom-event]').forEach((e) = e.on[e.attributes['event-name']].listen...` 其中custom-event 属性仅用于选择元素event-name="input" 可以是第二个属性,指示要监听的事件。
    • 太糟糕了,这不起作用。无论如何,您帮助我回答并回答了问题。
    猜你喜欢
    • 2021-06-09
    • 1970-01-01
    • 2017-05-07
    • 2020-07-06
    • 1970-01-01
    • 1970-01-01
    • 2011-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多