我有一个网站,公众不可见,我在几个地方使用safecracker和矩阵字段。在正常加载的页面上,一切都很好。但是当矩阵字段出现在叠加层中时(使用颜色框),不会创建矩阵菜单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'
});
一切似乎都很好。有没有更好的方法来解决这个问题?
答案 0 :(得分:1)
如果Matrix字段在首次初始化时没有高度,则会将其大部分初始化内容置于保持状态,假设它默认隐藏或存在于辅助发布选项卡上。这减少了初始页面加载时间,并修复了一些需要知道其单元格中DOM元素维度的单元格(文本,资产,可能还有其他)的问题。
Matrix会在展开或点击其标签后自动恢复初始化,但如果您在发布页面之外使用Matrix并隐藏它,则需要触发初始化 - 自己恢复:
for (var i = 0; i < Matrix.instances; i++)
{
Matrix.instances[i].initRowsIfVisible();
}