Wicket AjaxFormUpdatingBehavior 和 Javascript
Wicket AjaxFormUpdatingBehavior and Javascript
我有这两个 DropDownChoice (DDC) 对象,它们工作得非常好:当从第一个 DDC 中选择一个元素时,第二个的列表会更新相关选择。第一个是 strumListDDC,后者是 controlListDDC。
controlListDDC.setOutputMarkupId(true);
controlListDDC.setChoiceRenderer(new ChoiceRenderer<>("name"));
controlListDDC.add(new AjaxFormComponentUpdatingBehavior("change") {
@Override
protected void onUpdate(AjaxRequestTarget target) {
QCControl qcc = controlListDDC.getModelObject();
lotList = QCLot.getLotsForCtrl(qcc.getId());
if (!lotList.isEmpty()) {
target.add(lotListDDC);
}
}
});
searchForm.addOrReplace(new Label("strumListLabel", "Strumento:"));
searchForm.addOrReplace(strumListDDC = new DropDownChoice<>("strumList", InstalledStrum.loadAllStrum(false)));
strumListDDC.setDefaultModel(new Model<>());
strumListDDC.add(new AjaxFormComponentUpdatingBehavior("change") {
@Override
protected void onUpdate(AjaxRequestTarget target) {
InstalledStrum is = strumListDDC.getModelObject();
controlList = QCControl.loadQCControlPerStrumType(is.getStrumType());
lotList = new ArrayList<>();
if (!controlList.isEmpty()) {
target.add(controlListDDC);
target.add(lotListDDC);
}
}
});
出于友好的原因,我将这一点 Javascript 添加到页面模板中,我的所有 HTML 页面都源自该模板:
$(function filtersScroll() {
var $filters = $(".viewANfilters");
detailsPos = $filters.position().top;
$(window).on("scroll", function () {
if ($(window).scrollTop() > detailsPos)
$filters.css("position", "fixed").css("top", 0);
else
$filters.css("position", "fixed").css("top", detailsPos -$(window).scrollTop());
});
});
我通过使用 Wicket 添加了 javascript(但是如果我直接将代码插入 HTML 中,问题仍然存在,为了完整性,我只是 post):
response.render(JavaScriptContentHeaderItem.forScript(Costants.JS_FILTERS_SCROLL, "filters_scroll"));
当我添加 javascript 时,第一个 DDC 的 onUpdate 函数永远不会被调用(使用调试器检查)。一旦我删除 javascript,自动更新行为就会再次正常工作。并不是说这个 javascript 是页面的基础,没有它我仍然可以继续,但我担心当我需要添加一些严重的 javascript.
时,同样的事情会再次发生
由于我是 javascript 的新手,任何人都可以提示我阻止 AjaxFormComponentUpdatingBehavior 工作的原因吗?不同脚本标签之间是否存在某种冲突?最后一页还有其他的,由 Wicket 自己添加,但由于它们一直不止一个,我认为新脚本不会造成任何麻烦...
检查您的选择器“.viewANfilters”——如果不存在带有 class 的元素,position() 将是未定义的,您的 JavaScript 失败并且 Wicket 将无法注册任何事件处理程序。
我有这两个 DropDownChoice (DDC) 对象,它们工作得非常好:当从第一个 DDC 中选择一个元素时,第二个的列表会更新相关选择。第一个是 strumListDDC,后者是 controlListDDC。
controlListDDC.setOutputMarkupId(true);
controlListDDC.setChoiceRenderer(new ChoiceRenderer<>("name"));
controlListDDC.add(new AjaxFormComponentUpdatingBehavior("change") {
@Override
protected void onUpdate(AjaxRequestTarget target) {
QCControl qcc = controlListDDC.getModelObject();
lotList = QCLot.getLotsForCtrl(qcc.getId());
if (!lotList.isEmpty()) {
target.add(lotListDDC);
}
}
});
searchForm.addOrReplace(new Label("strumListLabel", "Strumento:"));
searchForm.addOrReplace(strumListDDC = new DropDownChoice<>("strumList", InstalledStrum.loadAllStrum(false)));
strumListDDC.setDefaultModel(new Model<>());
strumListDDC.add(new AjaxFormComponentUpdatingBehavior("change") {
@Override
protected void onUpdate(AjaxRequestTarget target) {
InstalledStrum is = strumListDDC.getModelObject();
controlList = QCControl.loadQCControlPerStrumType(is.getStrumType());
lotList = new ArrayList<>();
if (!controlList.isEmpty()) {
target.add(controlListDDC);
target.add(lotListDDC);
}
}
});
出于友好的原因,我将这一点 Javascript 添加到页面模板中,我的所有 HTML 页面都源自该模板:
$(function filtersScroll() {
var $filters = $(".viewANfilters");
detailsPos = $filters.position().top;
$(window).on("scroll", function () {
if ($(window).scrollTop() > detailsPos)
$filters.css("position", "fixed").css("top", 0);
else
$filters.css("position", "fixed").css("top", detailsPos -$(window).scrollTop());
});
});
我通过使用 Wicket 添加了 javascript(但是如果我直接将代码插入 HTML 中,问题仍然存在,为了完整性,我只是 post):
response.render(JavaScriptContentHeaderItem.forScript(Costants.JS_FILTERS_SCROLL, "filters_scroll"));
当我添加 javascript 时,第一个 DDC 的 onUpdate 函数永远不会被调用(使用调试器检查)。一旦我删除 javascript,自动更新行为就会再次正常工作。并不是说这个 javascript 是页面的基础,没有它我仍然可以继续,但我担心当我需要添加一些严重的 javascript.
时,同样的事情会再次发生由于我是 javascript 的新手,任何人都可以提示我阻止 AjaxFormComponentUpdatingBehavior 工作的原因吗?不同脚本标签之间是否存在某种冲突?最后一页还有其他的,由 Wicket 自己添加,但由于它们一直不止一个,我认为新脚本不会造成任何麻烦...
检查您的选择器“.viewANfilters”——如果不存在带有 class 的元素,position() 将是未定义的,您的 JavaScript 失败并且 Wicket 将无法注册任何事件处理程序。