Я создал пользовательский компонент с Snap.svg.js, который рисует графику на холсте svg. Он работает идеально, но у меня проблемы с событиями. Я связываю событие такого:Повторить события в jsf после обновления Ajax (PrimeFaces и Snap.svg)
var draughts = snap.selectAll("circle[fill~='" + draughtMineColor + "']");
draughts.forEach(function (draught) {
draught.unhover();
draught.hover(function() {
draught.animate({r: draughtRadius + 2}, 100, snap.easeIn);
}, function() {
draught.animate({r: draughtRadius}, 100, snap.easeIn);
});
});
Он работает и шашки (кружки) растет на висениях и возвращается обратно по наведению из. Но когда я нажимаю на проекте я называю слушателя, который обновляет его и несколько квадратов, как это:
public void onClick(ClickEvent event) {
if (event.getTarget() instanceof Draught) {
Draught clicked = (Draught) event.getTarget();
if (prevClicked != null) {
prevClicked.updateShape();
}
clicked.setFill("red");
board.resetDeskDrawing();
board.highlightAllowedMoves(clicked);
prevClicked = clicked;
} else if (event.getTarget() instanceof Square) {
Square square = (Square) event.getTarget();
board.moveDraught(prevClicked, square);
}
}
И JSF:
<h:form prependId="false">
<p:remoteCommand name="updateCanvas" update="canvas" oncomplete="updatePlay();"/>
<snap:svg id="canvas" value="#{playView.model}" style="height: 600px; width: 600px;">
<p:ajax event="click" listener="#{playView.onClick}"
oncomplete="updateCanvas();"/>
</snap:svg>
</h:form>
Но после того, как Щелкнуть перестает работать. Есть идеи?
Что/нападающий? – Kukeltje
Hover - это функция из библиотеки Snap.svg, это http://snapsvg.io/docs/#Element.hover –
Тогда это скорее всего вызвано тем, что Snap.svg добавляет только обработчики событий в событие готовности документа. Если вы можете узнать, как снова добавить обработчики событий thsese (источник открыт, найти функцию), вы можете вызвать эту функцию в ajax oncomplete – Kukeltje