【问题标题】:How can I rename a sortable nested element based on target parent element?如何根据目标父元素重命名可排序的嵌套元素?
【发布时间】:2016-12-16 02:42:30
【问题描述】:

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

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 只给了我该目标内的子数组,无法获取父对象本身的名称或对象。

【问题讨论】:

  • 在您的示例中,删除A1 后,现有的A2 是否应该变为A1。?
  • 我想我必须考虑这两种情况,即对你的问题是和否,因为我还不知道。
  • 这有很大的不同。如果将其更改为A1,则意味着每个“名称”都只是基于项目在结构中的位置。
  • 我认为我们很可能不得不将其更改为 A1。但同样的问题仍然存在,没有办法获取目标元素,只能获取目标可观察数组及其子元素。

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


【解决方案1】:

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/

【讨论】:

  • 最后我用了一个和这个方法非常相似的订阅者。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-19
  • 2016-03-02
  • 2018-05-11
  • 2017-01-18
  • 1970-01-01
相关资源
最近更新 更多