我正在尝试构建一个自定义元素来管理简单列表,重命名项目并更改其顺序。不幸的是,我注意到一些奇怪的行为,实际上很难确定。在Aurelia中更改数组顺序,怪异行为
- 键入到输入似乎没有被识别为改变用于奥里利亚更新项目
- 当输入/改变页面加载之后的一个项,并且然后经由这些方法改变阵列的位置,的指数该项目似乎丢失(变成-1)。如果项目没有通过输入字段更改,则数组中的索引被正确识别并进行排序。
是否有任何已知的问题数组,绑定,甚至可能是子元素?为了获得理想的行为,接受测试的测试是什么?非常感谢!
父元素
...
<list items.bind="list"></list>
...
列表元素
<template>
<div class="input-group" repeat.for="item of items">
<input value.bind="item" class="input" type="text" placeholder="Item" autofocus>
<a click.delegate="deleteItem(item)">X</a>
<a click.delegate="moveItemUp(item)">^</a>
<a click.delegate="moveItemDown(item)">v</a>
</div>
<a click.delegate="addItem()">Add Item</a>
名单JS
export class List {
@bindable({defaultBindingMode: bindingMode.twoWay}) items;
constructor() {}
addItem() {
this.items.push('new')
}
deleteItem(item) {
let i = this.items.indexOf(item)
this.items.splice(i, 1)
}
moveItemUp(item) {
let i = this.items.indexOf(item)
if (i === 0) return
let temp = item
this.items.splice(i, 1)
this.items.splice(i - 1, 0, temp)
}
moveItemDown(item) {
let i = this.items.indexOf(item)
if (i === this.items.length) return
let temp = item
this.items.splice(i, 1)
this.items.splice(i, 0, temp)
}
}