1

これがどのように起こったのかわかりませんが、par (テキスト コンポーネント) のデザイン モードで [編集] をクリックすると、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 つのコンポーネントが同じタイトルを持っている場合、最後の要素のタイトルが次の要素でチェックされているため、未定義のオブジェクトの.titlethis.items.items[i + 1]がスローされると、 null (範囲外の配列インデックスの例外)になります。例外。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;
}

または、同じグループの最後の 2 つのコンポーネントが同じ名前を持っていないことを確認します。(これは基本的に、コンポーネントをコピーして貼り付けようとしたときに発生します。したがって、既存のコンポーネントをコピーした後にタイトルまたはグループを変更することで、この問題を回避できます)。

于 2013-04-16T17:33:34.033 に答える