1

我不知道这是怎么发生的,但是在par (文本组件)的设计模式下单击 Edit 会在widget.js 中生成脚本错误。当您单击以编辑它们时,所有其他组件都可以正常工作。

以下是错误的控制台转储:

火狐: Error: TypeError: this.items.items[(i + 1)] is undefined Source File: http://localhost:4502/libs/cq/ui/widgets.js Line: 147092

有问题的完整代码块:

if (title != this.items.items[i + 1].title) {
  // next title is different >> break
  break;
}

铬合金:Uncaught TypeError: Cannot read property 'title' of undefined, widgets.js:147092

上述错误的一些包含的跟踪路径:

CQ.Ext.form.FieldSet.listeners.render widgets.js:147092
EXTUTIL.Event.fire widgets.js:9214
EXTUTIL.Observable.fireEvent widgets.js:8860
CQ.Ext.extend.render widgets.js:22566
CQ.Ext.layout.ContainerLayout.CQ.Ext.extend.renderItem widgets.js:26452
CQ.Ext.layout.FormLayout.CQ.Ext.extend.renderItem widgets.js:28653
CQ.Ext.layout.ContainerLayout.CQ.Ext.extend.renderAll widgets.js:26443
CQ.Ext.layout.ContainerLayout.CQ.Ext.extend.onLayout widgets.js:26429
CQ.Ext.layout.AnchorLayout.CQ.Ext.extend.onLayout widgets.js:26961

标题在哪里par?它不作为独立项目包含在文本组件中,因此这里有些东西没有意义。

4

1 回答 1

4

这个问题不是由于“par”的标题问题,而是组件的标题问题。基本上,当您在设计模式下单击 parsys 的编辑按钮时,它会列出您的实例中存在的所有组件(/libs 和 /apps 下的组件)。

这是由您的小部件库中的ComponentSelector.js完成的。组件选择器收集实例中的所有组和组件,忽略以“。”开头的组。(例如.hidden),忽略那些没有标题的组件,按标题的升序排列所有组,然后按升序排列特定组下的所有组件,最后将列表显示给作者,作者从那里得到为该特定 parsys 选择允许的组件。

现在,如果您的实例中存在 2 个或多个具有相同名称和相同组的组件,则它会尝试在组件名称后面附加项目名称,以便于识别(当以升序排列时,这些组件相邻出现彼此之间,作者很难确定该组件属于哪个应用程序)。因此,例如,如果在foundation下以及geometrixx等下有一个名为“downloads”的组件,则将其显示为downloads(foundation)downloads(geometrixx)等。

你提到的这段代码,检查当前组件的标题和下一个组件的标题是否相同,如果不同,则中断循环,否则继续循环以将项目名称附加到标题。

if (title != this.items.items[i + 1].title) {
  // next title is different >> break
  break;
}

现在,如果特定组下相邻组件的标题相同,则此条件可以正常工作,除非并且直到具有相同标题的组件是该特定组中的最后一个组件,当按升序排列时。如果组中的最后 2 个组件具有相同的标题,则当最后一个元素的标题与下一个元素一起检查时this.items.items[i + 1]将为null(数组索引超出范围异常) ,因此未定义对象上的.title会抛出例外Uncaught TypeError: Cannot read property 'title' of undefined, widgets.js:147092

您可以通过将上述条件替换为以下内容来解决此问题

if (i != length - 1 && title != this.items.items[i + 1].title) {
    // next title is different >> break
    break;
}

或者通过确保同一组下的最后两个组件没有相同的名称。(这基本上发生在您尝试复制粘贴组件时。因此,确保在复制现有组件后更改标题或组将避免此问题)。

于 2013-04-16T17:33:34.033 回答