我正在尝试在Tapestry 5.3.7中使用Stitch onEvent mixin。
这是OnEvent
那里的Javascript:
T5.extendInitializers({
onEvent: function (spec) {
var element = $(spec.id).observe(spec.event, function () {
var params = {};
if (spec.fieldIds) {
for (var i = 0; i < spec.fieldIds.length; ++i) {
var fieldId = spec.fieldIds[i];
var paramName = "onEvent." + fieldId;
var paramValue = $(fieldId).getValue();
params[paramName] = paramValue;
}
}
var zoneManager = Tapestry.findZoneManagerForZone(spec.zone);
zoneManager.updateFromURL(spec.url, params);
});
}
});
我在TML中这样使用它:
<t:form t:id="filterTextForm">
<div style="float:right">
<input id="filterText" t:id="filterText" t:type="textfield"
t:value="filter" zone="configZone" t:autofocus="literal:true" onClick="this.select()" t:mixins="onEvent" event="keyup"/>
</div>
</t:form>
和我的事件方法是这样的:
void onKeyupFromFilterText(String filter) {
this.filter = filter;
if (request.isXHR()) {
ajaxResponseRenderer.addRender(configZone).addRender(descZone);
}
}
当我t:mixins="onEvent" event="keyup"
有时,页面上所有区域都没有更新,因此不会生成AJAX请求。
当我删除它时,除了我要解决的部分(问题中描述的内容)之外,其他所有东西都可以正常工作。
我正在使用Tapestry 5.3.7。
watch()是原型函数。我猜想您正在使用tapestry-jquery,这是一个第三方库,它删除了原型并将其替换为jquery。
您需要修改javascript以使其与jquery配合使用(例如,observe()需要更改为on())
您可能还会发现js的其他位也坏了(例如,我不确定tapestry-jquery的ZoneManager是否与核心Tapestry完全相同)。
tapestry-jquery带有一个内置的bind mixin,其功能与相似onevent
。您可能会发现使用该mixin足够了。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句