我在 Magento 系统中遇到了一个问题,在该系统中保存大量属性要么根本不起作用,要么只能部分起作用。这似乎是一个与 javascript 相关的问题,我希望 Stack Overflow 上的某个人有一些“已知的科学”来处理这种情况,或者可以为我指明正确的方向。
基本问题是,Magento 系统有超过 250 个颜色属性选项标签。如果管理员用户尝试通过执行以下操作来管理这些
- 导航到目录 -> 属性 -> 管理属性
- 选择颜色属性
- 单击管理标签/选项选项卡
- 编辑最后一个标签选项
- 点击“保存并继续编辑”
发生两件事之一。
在 OS X 上的谷歌浏览器中,该按钮停留在“按下”状态,一段时间后谷歌浏览器的“此页面没有响应”终止对话框出现。
在 OS X 上基于 mozilla 的浏览器中,单击按钮会使浏览器“思考”一下,但最终会提交表单。 但是,只有部分属性标签列表会发布到管理控制器。这意味着用户只能编辑前 75 - 100 个标签,因为其他标签永远不会提交。
我也有来自 Windows 用户的报告描述了第二种行为(浏览器是非特定的)
显而易见的答案是要么调查表现不佳的 javascript,要么(Grouch Marx 风格)“不要那样做”。在我花时间分析/挖掘该页面上的 javascript 之前,我希望有一些已知的解决方法,或者关于导致问题的具体知识。
Magento CE 1.7.x,如果它很重要。
更新: Javascript 性能问题是一个红鲱鱼。它们是由大量输入字段在
js/prototype/validation.js
特别是在这个 try catch 块中
try {
if(this.options.stopOnFirst) {
result = Form.getElements(this.form).all(function(elm) {
if (elm.hasClassName('local-validation') && !this.isElementInForm(elm, this.form)) {
return true;
}
return Validation.validate(elm,{useTitle : useTitles, onElementValidate : callback});
}, this);
} else {
result = Form.getElements(this.form).collect(function(elm) {
if (elm.hasClassName('local-validation') && !this.isElementInForm(elm, this.form)) {
return true;
}
return Validation.validate(elm,{useTitle : useTitles, onElementValidate : callback});
}, this).all();
}
} catch (e) {
}
但是,即使我将其短路并让函数返回 true,不保存所有标签的行为仍然存在。