나는 mixin으로 이것을 할 것입니다.
public class PaletteChange {
@Parameter
private String zone;
@InjectContainer
private Palette palette;
public void afterRender() {
Link eventLink = componentResources.createEventLink("change");
JSONObject args = new JSONOBject(
"id", pallete.getClientId(),
"url", eventLink,
"zone", zone
);
javascriptSupport.addScript("palleteChange(%s)", args);
}
Object onChange(@RequestParameter("value") String value) {
CaptureResultCallback<Object> callback = new CaptureResultCallback<Object>();
resources.triggerEvent("change", new String[] { value }, callback);
return callback.getResult();
}
}
자바 스크립트
function palleteChange(spec) {
var field = $('#' + spec.id + '/select[1]');
field.on('change', function() {
var zoneManager = Tapestry.findZoneManagerForZone(spec.zone);
var params = { value: field.val() };
zoneManager.updateFromURL(spec.url, params);
});
}
그런 다음
@Inject
private Zone myZone;
Block onChangeFromMyPalette(String value) {
doStuff(value);
return myZone.getBody();
}
비슷한 믹스 인을위한
here를 참조 코드
<t:palette t:id="myPalette" t:mixins="paletteChange" zone="myZone" ... />
<t:zone t:id="myZone">
...
</t:zone>
페이지의 믹스 인을 사용합니다.
몇 노트; 5.4-beta-17이 현재 사용 가능하며 (미리보기로 투표가 예정 됨) 베타 6 이후에 변경된 사항을 정직하게 말할 수 없습니다. 여기 클라이언트 측에는 많은 힘이 있습니다. 팔레트 구성 요소는 willChange 및 didChange 이벤트 (청취자에게 거부권을 포함하여)를 생성합니다. –
고마워, 나는 그걸 몰랐다. 매우 유망한 것으로 들립니다. 제가 확인하겠습니다. – martin
어떻게 이러한 이벤트를 잡을 수 있습니까? 다음을 시도했지만 그 중 아무 것도 호출되지 않습니다. @OnEvent (value = "willChange", component = "myPalette"), @OnEvent (value = "t5 : 팔레트 : willChange", component = "myPalette"). 내가 놓친 게 있니? – martin