简体   繁体   English

如何使用聚合物> 1.0在dart中删除嵌套的dom rep元素

[英]How to remove a nested dom rep element in dart using polymer >1.0

Hello I cant seem to find the correct way to remove a nested element using polymer 1.0 您好,我似乎无法找到使用聚合物1.0删除嵌套元素的正确方法

createMigrationTable.html createMigrationTable.html

<dom-module id="custom-create-migration-table">
<template>
    <style>
        paper-button {
            /**border: 1px solid #d81b60;*/
        }
        paper-material {
            width: 98%;
            margin: 5px auto;
        }
        br{
            clear:both;
        }
    </style>
        <paper-material elevation="2" id="page_2">
            createTable:
            <paper-button raised on-tap="addTable">
                + add new table
            </paper-button>
            <template is="dom-repeat" items="{{createTables}}">
                {{item.name}}
                <paper-input required label="Table Name" value="{{item.name}}"></paper-input>
                <template is="dom-repeat" items="{{item.columns}}" as="column">
                    <custom-column-view column="{{column}}"></custom-column-view>
                    <a on-tap="removeColumn">remove</a>
                    <br/>
                </template>
                <paper-button raised on-tap="addColumn">
                    Add Column
                </paper-button>

            </template>
        </paper-material>

</template>
</dom-module>

createMigrationTable.dart createMigrationTable.dart

@HtmlImport('createMigrationTable.html')
library dartabase.poly.createMigrationTable;

// Import the paper element from Polymer.
import 'package:polymer_elements/iron_pages.dart';
import 'package:polymer_elements/paper_material.dart';
import 'package:polymer_elements/paper_button.dart';
import 'package:polymer_elements/paper_input.dart';
//import "../poly/columnView.dart";
import "../poly/table.dart";

// Import the Polymer and Web Components scripts.
import 'package:polymer/polymer.dart';
import 'package:web_components/web_components.dart';

@PolymerRegister('custom-create-migration-table')
class CreateMigrationTable extends PolymerElement {
    @property
    List<Table> createTables = new List();

    CreateMigrationTable.created() : super.created();

    @reflectable
    addTable(event, [_]) {
        Table table = new Table(name:"defaultName",columns: [{
            "name":"defaultName",
            "type":["BINT",
            "INT",
            "VARCHAR"
            ],
            "def":"",
            "nil":true
        }]);
        /*Map table = {
            "tableName":"defaultTableName",
            "columns":[{
                "name":"defaultName",
                "type":"defaultType",
                "default":"",
                "notNull":true
            }]
        };*/
        //createTables.add(table);
        add('createTables', table);
    }

    @reflectable
    transition(event, [_]) {
        IronPages ip = Polymer.dom(this.root).querySelector("iron-pages");
        ip.selectNext();
    }

    @reflectable
    void addColumn(event, [_]) {
        var model = new DomRepeatModel.fromEvent(event);
        model.add("item.columns", {
            "name":"defaultName",
            "type":"",
            "def":"",
            "nil":true
        });
    }

    @reflectable
    void removeColumn(event, [_]) {
        var model = new DomRepeatModel.fromEvent(event);
        model.removeItem("item", model.item);
    }
    void ready() {
        print("$runtimeType::ready()");
    }


}

tabel.dart tabel.dart

import 'package:polymer/polymer.dart';
import 'package:web_components/web_components.dart';

class Table extends JsProxy {
    @reflectable
    String name;
    @reflectable
    List columns;

    Table({this.name, this.columns});

}

what should be the correct way to remove the element. 什么应该是删除元素的正确方法。

first I tried to call remove from inside the custom-column-view. 首先,我尝试从自定义列视图中调用remove。 but that did not update the bindings then I read that the parent elements should have the control over adding and removing elements.. so I moved it one level above. 但是那没有更新绑定然后我读到父元素应该控制添加和删除元素..所以我把它移动了一级以上。

I would have thought that I can do it like in the addColumn method but but inside removeColumn I only receive the column view item. 我本以为我可以像在addColumn方法中那样做,但是在removeColumn中我只收到列视图项。

I also tried to use index-as but I dont know how to be able to access both indexes i and j inside the removeColumn functions. 我也尝试使用index-as但我不知道如何能够访问removeColumn函数中的索引i和j。

A custom equals implementation might fix it (not sure) 自定义等于实现可能会修复它(不确定)

class Table extends JsProxy {
    @reflectable
    final String name;
    @reflectable
    List columns;

    Table({this.name, this.columns});

    int get hasCode => name.hashCode;
    int operator ==(Object other) => other is Table && other.name == name;
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM