javascript - Polymer 1.0 数组拼接正在删除数组中的错误项目

标签 javascript arrays polymer splice html5-template

我正在尝试在 Polymer 中创建一个简单的待办事项列表,并且我的添加部分正在工作。当我单击该项目旁边的“删除”图标时,它会删除最近添加的项目,而不是应删除的项目。看起来它得到了错误的数组索引,我不知道如何修复它?谢谢!

<dom-module id="my-todo-list">
<template>

<div class="card">

  <div class="form">
    <paper-input label="Task" value="{{todo.task}}"></paper-input>
    <paper-button raised on-tap="_addTodo">Add Todo</paper-button>
  </div>

  <template is="dom-repeat" items="{{todos}}">
    <paper-card class="todos">
      <paper-checkbox id="checkTodo" on-click="_completeTodo"></paper-checkbox>
      <p>{{item.task}}</p>
      <iron-icon icon="delete" on-tap="_destroyAction"></iron-icon>
    </paper-card>
  </template>

</div>

</template>

<script>
Polymer({
  is: 'my-todo-list',

  properties: {
    todo: {
      type: Object,
      value: function() {
        return {};
      }
    },
    todos: {
      type: Array,
      value: function() {
        return [];
      }
    }
  },

  _addTodo: function() {
    console.log(this.todo);
    this.push('todos', this.todo);
    // this.todo = {};
  },

  _destroyAction: function(todo) {
    var index = this.todos.indexOf(todo);
    this.splice('todos', index, 1);
  },
});
 </script>
</dom-module>

最佳答案

第一个问题是您始终在 _addTodo() 方法中插入对对象 this.todo 的相同引用。相反,您应该复制该对象。您还应该添加一个 ID 以将其与其他项目区分开来。

  _addTodo: function() {
    var copy = Object.assign({}, this.todo);    
    copy.id = this.push('todos', copy);
    // this.todo = {};
  }

然后您需要在 HTML 模板中添加相同的 ID:

<paper-card class="todos" id="{{item.id}}">

现在您可以修改 _destroyAction() 方法,使用 Array.findIndex() 方法和 Event.target< 在数组中查找正确的元素属性:

  _destroyAction: function(ev) {
    var index = this.todos.findIndex( function(item) { 
        return item.id == ev.target.parentElement.id 
    } );
    this.splice('todos', index, 1);
  }

关于javascript - Polymer 1.0 数组拼接正在删除数组中的错误项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41398363/

相关文章:

python - 有效过滤掉两个二维 numpy 数组之间的匹配行

javascript - Google Map API V3 无法在 polymer 元素内部工作

javascript - 从可排序的 jQuery 序列化中获取数组

javascript - 为表格中的每一行添加 onclick 事件

php - 有没有办法在纯 PHP 中检测循环数组?

dart - polymer Dart 中的按钮单击不起作用;需要 polymer 元素

polymer - 有没有办法调试 TypeError : Invalid value used as weak map key?

javascript - 如何设置具有相同ID的多个div相对于它们在DOM中的位置的边距高度

javascript - 如何在 AngularJS 中实现 Controller 特征

c++ - 如何传递二维结构数组给函数?