【问题标题】:Dart Polymer: Removing element from ListDart Polymer:从列表中删除元素
【发布时间】:2015-07-16 17:33:47
【问题描述】:

我有一个带有一些模型的自定义元素。这是自定义元素的代码。

message-element.html

<polymer-element name="message-element" attributes="message">
  <template>

    <table class="table">
    <tr template repeat="{{attrib in attribs}}">
      <td><paper-input name="message-attrib-name" label="New Attribute" value="{{attrib.name}}"></paper-input></td>
      <td>
        <paper-input name="message-attrib-value" label="" value="{{attrib.value}}"></paper-input>

        <core-icon-button icon="check" on-tap="{{addAttribute}}"></core-icon-button>
        <core-icon-button icon="highlight-remove" on-tap="{{deleteAttribute}}"></core-icon-button>
      </td>
    </tr>
    </table>

  </template>

  <script type="application/dart" src="message-element.dart"></script>
</polymer-element>

message-element.dart

@CustomTag('message-element')
class MessageElement extends PolymerElement with Observable {
  @published Message message;
  @observable List<Attribute> attribs = toObservable([]);
  @observable Attribute att;

  /// Constructor used to create instance of MainApp.
  MessageElement.created() : super.created() {
    polymerCreated();
  }

  attached() {
    att = new Attribute('', '');
    attribs.add(att);
    message.attributes = attribs; // initialize with 1 attrib
  }

  void addAttribute(Event event, Object detail, Node sender) {
    att = new Attribute('', '');
    attribs.add(att);
  }

  void deleteAttribute(Event event, Object detail, Node sender) {
    // remove the clicked attrib
  }
}

attribs 显示在模态对话框中,attribs 中的每个属性都有一对带有添加和删除按钮的输入。添加元素工作正常。如何从属性中删除单击的属性。我在点击删除按钮时调用 void deleteAttribute(Event event, Object detail, Node sender)。在此调用中,我需要从列表中删除属性,但如何获取点击属性的详细信息,以便我可以从列表中删除它。

【问题讨论】:

    标签: data-binding dart polymer dart-polymer


    【解决方案1】:

    聚合物 >= 1.0.0

    @reflectable
    void someClickHandler(dom.Event event, [_]) {
      // for native events (like on-click)
      var model = new DomRepeatModel.fromEvent(event);
      // or for custom events (like on-tap, works also for native events)
      var model = new DomRepeatModel.fromEvent(convertToJs(event));
      var value = model.jsElement['items']; 
      // or 
      var value = model.jsElement[$['mylist'].attributes['as']];
      // if you used the `as="somename"` 
      // in your <core-list> or <template is="dom-repeat">
    }
    

    有一个与自定义事件相关的未解决问题:https://github.com/dart-lang/polymer-dart/issues/624

    聚合物

    import 'package:template_binding/template_binding.dart' as tb;
    ...    
    
    void deleteAttribute(Event event, Object detail, Node sender) {
      tb.TemplateInstance ti = tb.nodeBind(event.target).templateInstance; 
      var value = ti.model.value as Attribute;
      attribs.remove(value);
    }
    

    更多详情请见In Polymer.js children of a template have a reference to the template, how can this be done in Polymer.dart

    【讨论】:

    • 这是在 var value = ti.model.value as Inner 'The name 'Inner' is not a type and cannot be used in an 'as' expression'上给我以下警告
    • 好的,现在可以正常工作了。但我不明白。您能否给我一些指示以深入了解它。我仍在学习 Dart 和 Polymer,如果您能给我链接以快速深入地学习,我将不胜感激。感谢您的帮助。
    • 对不起,我没有链接,这种“高级”的东西还没有记录好。 Polymer 所做的是将 Expando (stackoverflow.com/questions/13358018) 分配给它创建的每个节点,动态保存对模型实例(在您的情况下为属性)的引用,并使用我的答案中的代码从节点获取引用的模型实例与事件一起传递。
    • 我正在关注很多讨论,以及 GitHub 存储库更新(问题、拉取请求),有时我会在其中找到一些有趣的部分。还有 Polymer.js 的 StackOverflow 上的 [polymer] 标签。几乎所有在 Polymer.js 中工作的东西都可以以某种方式翻译成 Dart。我确信当 Polymer 稳定时文档会变得更好(1.0)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-05
    • 2020-12-14
    • 1970-01-01
    • 2014-12-19
    相关资源
    最近更新 更多