【问题标题】:Prevent paper-dialog from automatically closing防止纸质对话框自动关闭
【发布时间】:2014-10-09 10:32:57
【问题描述】:

你好:

我在页面中有一个paper-dialog 元素:

<paper-dialog ... id="autom_desc_dialog" autoCloseDisabled> 
    ...
    <paper-button ... id="automatizar" affirmative autofocus disabled></paper-button>
</paper-dialog>

我有一个事件监听器来处理paper-button 点击:

var auto_btn = querySelector('#automatizar');
auto_btn.on["click"].listen((Event e) {
    // Some AJAX stuff
});

我想要的是,在某些情况下,为了能够防止对话框关闭,我尝试了event.preventDefault()event.stopImmediatePropagation()event.stopPropagation(),但没有成功。

提前致谢。

【问题讨论】:

    标签: dart dart-polymer paper-elements


    【解决方案1】:

    您不需要删除肯定/否定属性,因为它们用于布局。 Polymer 对话框文档是错误的(我已经打开了一个 GH 问题)closeSelector 的默认值是 '[dismissive],[affirmative]' 而不是 "",您只需将 closeSelector 设置为 "" 并且它不会关闭单击按钮时的对话框。

    【讨论】:

    • 谢谢 ;) 是的,仅仅为了修改这个简单的行为而变得那么复杂是没有意义的
    【解决方案2】:

    您只需从按钮中删除affirmative 属性,然后您就可以完全控制该行为。

    app-element.dart

    import 'package:polymer/polymer.dart';
    
    import 'dart:html';
    import 'package:paper_elements/paper_dialog.dart';
    /**
     * A Polymer app-element element.
     */
    @CustomTag('app-element')
    
    class AppElement extends PolymerElement {
    
      /// Constructor used to create instance of AppElement.
      AppElement.created() : super.created() {
      }
    
      void openClickHandler(Event e) {
        print(e);
        ($['autom_desc_dialog'] as PaperDialog).opened = true;
      }
    
      void closeClickHandler(Event e){
        if(true /* some condition */) {
          ($['autom_desc_dialog'] as PaperDialog).opened = false;
        }
      }
    
    }
    

    app_element.html

    <!-- import polymer-element's definition -->
    <link rel="import" href="../../packages/polymer/polymer.html">
    <link rel="import" href="../../packages/paper_elements/paper_dialog.html">
    <link rel="import" href="../../packages/paper_elements/paper_button.html">
    
    <polymer-element name="app-element">
      <template>
        <style>
          :host {
            display: block;
          }
        </style>
        <paper-dialog id="autom_desc_dialog" autoCloseDisabled>
          <div>paper dialog</div>
          <paper-button id="automatizar" autofocus label="close" on-click="{{closeClickHandler}}"></paper-button>
        </paper-dialog>
    
        <paper-button id="open" autofocus label="open" on-click="{{openClickHandler}}"></paper-button>
      </template>
      <script type="application/dart" src="app_element.dart"></script>
    </polymer-element>
    

    【讨论】:

    • 所以无论如何都没有办法在不改变肯定属性的情况下阻止关闭我喜欢你制作新组件的方式=)
    • 我不知道,但我认为当您想要自定义行为时,这将是删除这种自动行为的明显方法。这种方法有什么你不喜欢的吗?我不知道您所说的your way of making a new component 是什么意思。有什么具体的吗?我用pub run polymer:new_element app-element -o some_target_dir
    • 我认为(如 javascript)你会做一些 preventDefault() 就是这样,但这也是一个优雅的解决方案。
    • 这种方式也有可能,但需要更多时间调试才能弄清楚如何。
    猜你喜欢
    • 2014-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多