У меня есть раскрывающееся меню выбора, в котором событие onChange вызывает вызов Ajax для повторной обработки формы, а затем вызывает функцию javascript init(), которая будет изменять порядок сортируемых div в формы на основе новых данных. Используя отладчик, я обнаружил, что после инициализации() делается дивы прикажут, как и ожидалось, но тогда он будет выполнять:Scriptaculous Sortable не работает должным образом с Ajax и JSF
responder = function(event) {
Event.extend(event, element);
handler.call(element, event);
};
в функции функции _createResponder (элемент, именем_события, обработчик) в prototype.js с последующим выполнением
return !scope ? method : function() {
return method.apply(scope, arguments || []);
}; // Function
в функции сцепки: функции (/ объекта/сферы,/функции | Строка/метод/... /) в jsf.js, который сбрасывает divs обратно в исходный порядок.
Здесь урезанная фрагмент кода из моего facelet:
<body onload="init()">
<form id="MaintainPreferencesBean">
<t:selectOneMenu id="selectLayout" value="#{maintainPreferencesBean.layoutIndex}">
<f:selectItems value="#{maintainPreferencesBean.layoutNames}" />
<f:ajax listener="#{maintainPreferencesBean.setLayout}" render="@form" onevent="init()" />
</t:selectOneMenu>
<div id="sortable">
<div id="demoGroup" class="dataGroup"></div>
<div id="offenseGroup" class="dataGroup"></div>
</div>
</form>
</body>
Вот JavaScript:
function init() {
changeOrder("sortable", "dataGroup", document.getElementById("MaintainPreferencesBean:selectLayout").selectedIndex);
Sortable.create("sortable", {
tag : 'div'
});
}
function changeOrder(container, className, layoutIndex) {
var divs = document.getElementById(container).getElementsByClassName(
className);
for (var i = 0; i < groupNamesArray.length; i++) {
var div = document
.getElementById(groupNamesArray[desiredOrder[layoutIndex][i]]);
var insPt = divs[i];
if (insPt != null && insPt != div)
insPt.parentNode.insertBefore(div, insPt);
}
}
Обратите внимание, что дивы действительно получить правильно заказать на не-Ajax обновления страницы , Также упорядочение работает, когда я использовал valueChangeListener (с обычным обходным путем) вместо Ajax.