在调用 modelChanged 方法时,在 Wicket 中使用 uniform() 会生成多个实例
Using uniform() in Wicket generates multiple instances when invoking the modelChanged method
我正在尝试实现一个简单的下拉菜单,该下拉菜单根据使用 Wicket 6.19 选择的另一个下拉菜单进行更新。到目前为止一切顺利,下拉列表正常工作。问题是我正在使用自定义的下拉选择组件,其中在 renderHead 方法中调用了 uniform() 方法。
@Override
public void renderHead(IHeaderResponse response) {
super.renderHead(response);
response.render(OnDomReadyHeaderItem.forScript("$('#" + getMarkupId(true) + "').uniform();"));
}
当我调用要更新的下拉列表的 modelChanged() 方法时,总是调用此方法(它是由其他人编写的)。因此,每次调用此 renderHead 方法时都会创建一个新的 div 元素,这会导致屏幕上的组件周围出现阴影。
Generated HTML after changing the selection of the dropdown several times
当我删除带有制服的代码时,不会生成额外的 div,但下拉菜单的样式有误。我不熟悉统一的方法。非常感谢您帮助解决此问题。
您可以用 if (!hasBeenRendered()) {...}
包装 renderHead()
中的代码。这样它只会在第一次 uniform
。
我知道自从我提出问题以来已经过去了很长一段时间,但最近我找到了解决方案。我知道这可能不是最好的解决方案,但它对我有用,也许它可以帮助遇到同样问题的人。
在此解决方案中,我在再次执行统一之前删除了 div 和子 span 元素。这样,调用统一方法后,我只有一个div。
@Override
public void renderHead(IHeaderResponse response) {
super.renderHead(response);
if(hasBeenRendered())
response.render(OnDomReadyHeaderItem.forScript("$('#" + getMarkupId(true) + "').parent().replaceWith(function() {return $('select', this);});"));
response.render(OnDomReadyHeaderItem.forScript("$('#" + getMarkupId(true) + "').uniform();"));
}
我正在尝试实现一个简单的下拉菜单,该下拉菜单根据使用 Wicket 6.19 选择的另一个下拉菜单进行更新。到目前为止一切顺利,下拉列表正常工作。问题是我正在使用自定义的下拉选择组件,其中在 renderHead 方法中调用了 uniform() 方法。
@Override
public void renderHead(IHeaderResponse response) {
super.renderHead(response);
response.render(OnDomReadyHeaderItem.forScript("$('#" + getMarkupId(true) + "').uniform();"));
}
当我调用要更新的下拉列表的 modelChanged() 方法时,总是调用此方法(它是由其他人编写的)。因此,每次调用此 renderHead 方法时都会创建一个新的 div 元素,这会导致屏幕上的组件周围出现阴影。
Generated HTML after changing the selection of the dropdown several times
当我删除带有制服的代码时,不会生成额外的 div,但下拉菜单的样式有误。我不熟悉统一的方法。非常感谢您帮助解决此问题。
您可以用 if (!hasBeenRendered()) {...}
包装 renderHead()
中的代码。这样它只会在第一次 uniform
。
我知道自从我提出问题以来已经过去了很长一段时间,但最近我找到了解决方案。我知道这可能不是最好的解决方案,但它对我有用,也许它可以帮助遇到同样问题的人。
在此解决方案中,我在再次执行统一之前删除了 div 和子 span 元素。这样,调用统一方法后,我只有一个div。
@Override
public void renderHead(IHeaderResponse response) {
super.renderHead(response);
if(hasBeenRendered())
response.render(OnDomReadyHeaderItem.forScript("$('#" + getMarkupId(true) + "').parent().replaceWith(function() {return $('select', this);});"));
response.render(OnDomReadyHeaderItem.forScript("$('#" + getMarkupId(true) + "').uniform();"));
}