如何根据目标父元素重命名可排序的嵌套元素?
How can I rename a sortable nested element based on target parent element?
如果我有一个像这样的嵌套列表:
root:
- A
- A1
- A2
- A2.1
- A2.1.1
- B
- B1
- B2
- C
如果我将一个元素拖到另一个列表中,我希望保持与顶部元素相同的命名。比如我把A1下面的东西拖到C里,A1应该重命名为C,因为新的父元素的名字是C。如果我把一个元素拖到A2.1.1里,它应该变成A2.1.1.1。像这样:
root:
- A
- A2
- A2.1
- A2.1.1
- A.2.1.1.1
- B
- B1
- B2
- C
- C1
这是一个示例 JS fiddle:http://jsfiddle.net/Lqttf/37/
我知道在 beforeMove 和 afterMove 函数回调中,它为您提供了一个 arg 参数,您可以在其中获取 targetParent。但是,targetParent 只给我该目标中的子项数组,无法获取父项本身的名称或对象。
Knockout 提供了对结构变化和重命名项目做出反应所需的一切。我提供了一个使用更简单的命名结构的示例,您可以修改它以按照您想要的方式工作。
ko.computed(function () {
var myName = this.name(), children = this.children();
ko.utils.arrayForEach(children, function (child, index) {
child.name(myName + '.' + (index+1));
});
}, this);
如果我有一个像这样的嵌套列表:
root:
- A
- A1
- A2
- A2.1
- A2.1.1
- B
- B1
- B2
- C
如果我将一个元素拖到另一个列表中,我希望保持与顶部元素相同的命名。比如我把A1下面的东西拖到C里,A1应该重命名为C,因为新的父元素的名字是C。如果我把一个元素拖到A2.1.1里,它应该变成A2.1.1.1。像这样:
root:
- A
- A2
- A2.1
- A2.1.1
- A.2.1.1.1
- B
- B1
- B2
- C
- C1
这是一个示例 JS fiddle:http://jsfiddle.net/Lqttf/37/
我知道在 beforeMove 和 afterMove 函数回调中,它为您提供了一个 arg 参数,您可以在其中获取 targetParent。但是,targetParent 只给我该目标中的子项数组,无法获取父项本身的名称或对象。
Knockout 提供了对结构变化和重命名项目做出反应所需的一切。我提供了一个使用更简单的命名结构的示例,您可以修改它以按照您想要的方式工作。
ko.computed(function () {
var myName = this.name(), children = this.children();
ko.utils.arrayForEach(children, function (child, index) {
child.name(myName + '.' + (index+1));
});
}, this);