1

一般には公開されていないサイトがあり、いくつかの場所でセーフクラッカーとマトリックス フィールドを使用しています。正常に読み込まれるページでは、すべて問題ありません。ただし、マトリックス フィールドが (カラーボックスを使用して) オーバーレイに表示される場合、マトリックス メニュー div は作成されません。

FireBug を使用してコードをステップ実行すると、問題は次の行にあるようです。

var $body = $(document.body);

$body が正しく設定されていません (これはオーバーレイの読み込みの競合状態でしょうか?)。したがって、matrix.js のこのコードのチャンクに到達すると、次のようになります。

obj.menu.$ul = $('<ul id="matrix-menu" />').appendTo($body).css({
    opacity: 0,
    display: 'none'
});

$body は解決されないため、メニューはどこにもアタッチできません。直ったと思いますが、他に何か壊れるのではないかと心配する必要があるかどうかを確認したいと思います。上記のコードを次のように変更すると:

obj.menu.$ul = $('<ul id="matrix-menu" />').appendTo($(document.body)).css({
    opacity: 0,
    display: 'none'
});

すべてがうまくいくようです。これに対処するより良い方法はありますか?

4

1 に答える 1

1

Matrix フィールドが最初に初期化されたときに高さが設定されていない場合、デフォルトで非表示になっているか、2 番目の公開タブにあると仮定して、ほとんどの初期化が保留されます。これにより、最初のページの読み込み時間が短縮され、セル内の DOM 要素のサイズを知る必要がある一部のセルタイプ (テキスト、アセット、その他) の問題も修正されます。

Matrix は、展開されるかタブがクリックされると自動的に初期化を再開しますが、発行ページの外で Matrix を使用して非表示にしている場合は、その初期化の再開を自分でトリガーする必要があります。

for (var i = 0; i < Matrix.instances; i++)
{
    Matrix.instances[i].initRowsIfVisible();
}
于 2013-05-13T16:55:28.397 に答える