如何根据目标父元素重命名可排序的嵌套元素?

时间:2016-08-09 22:01:23

标签: javascript jquery jquery-ui knockout.js jquery-ui-sortable

如果我有一个嵌套列表,如:

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小提琴样本:http://jsfiddle.net/Lqttf/37/

我知道在beforeMove和afterMove函数回调中它提供了一个arg参数,在其中你可以得到targetParent。但是,targetParent只给出了该目标中的子数组,无法获取父本身的名称或对象。

1 个答案:

答案 0 :(得分:2)

Knockout提供了对结构更改和重命名项目做出反应所需的一切。我提供了一个使用更简单的命名结构的示例,您可以修改它以按照您想要的方式工作。

ko.computed(function () {
  var myName = this.name(), children = this.children();
  ko.utils.arrayForEach(children, function (child, index) {
    child.name(myName + '.' + (index+1));
  });
}, this);

http://jsfiddle.net/Lqttf/47/