Как вызвать функцию SSJS из вычисленной ссылки HTML?
У меня на xpage есть вычисляемое поле, результатом которого является HTML. В этом HTML я хочу вычислить ссылку, которая вызовет некоторую функцию js на стороне сервера с последующим частичным обновлением.
Мой текущий код выглядит так:
<a href="#" onclick="return myFunction()">Click Here</a>
Это будет работать, если моя функция js является функцией на стороне клиента, но я хочу использовать эту функцию, чтобы установить значение поля в документе, поэтому мне нужен SSJS.
Статические ссылки, созданные на панели управления в xpage, позволяют ссылке вызывать SSJS с частичным обновлением. Как я могу сделать это с вычисленной ссылкой HTML?
3 ответа
Вы можете придерживаться своего кода, если вы используете объект XSP в myFunction()
функция на стороне клиента. Это позволяет вызвать частичное обновление. Другой вариант - вызвать элемент управления Extlib JSON и сохранить там свою логику. Немного зависит от вашего стиля кодирования
Другим вариантом может быть создание собственного обработчика событий и его выполнение с помощью клиентского JavaScript-кода, описанного в этой статье. Итак, предположим, что вы создаете обработчик событий примерно так:
<xp:eventHandler event="name" id="eventhandler1a">
<xp:this.action>
<xp:saveDocument />
</xp:this.action>
</xp:eventHandler>
Затем вы можете создать функцию для вызова этого обработчика события с помощью кода JavaScript:
XSP.executeOnServer = function () {
// the event handler id to be executed is the first argument, and is required
if (!arguments[0])
return false;
var functionName = arguments[0];
// OPTIONAL - The Client Side ID that is partially refreshed after executing the event handler
var refreshId = (arguments[1]) ? arguments[1] : "@none";
var form = (arguments[1]) ? this.findForm(arguments[1]) : dojo.query('form')[0];
// catch all in case dojo element has moved object outside of form...
if (!form)
form = dojo.query('form')[0];
// OPTIONAL - Options object containing onStart, onComplete and onError functions for the call to the
// handler and subsequent partial refresh
var options = (arguments[2]) ? arguments[2] : {};
// OPTIONAL - Value to submit in $$xspsubmitvalue. can be retrieved using context.getSubmittedValue()
var submitValue = (arguments[3]) ? arguments[3] : '';
// Set the ID in $$xspsubmitid of the event handler to execute
dojo.query('[name="$$xspsubmitid"]')[0].value = functionName;
dojo.query('[name="$$xspsubmitvalue"]')[0].value = submitValue;
this._partialRefresh("post", form, refreshId, options);
}
Затем вы можете вызвать обработчик события через этот код JavaScript на стороне клиента:
XSP.executeOnServer('#{id:eventhandler1a}', '#{id:panel1}')
Вот panel1
относится к контролю, который будет частично обновлен.
Управление ссылками не является статичным. Вы можете вычислить все, что хотите, например:
<xp:link escape="true" id="lnk">
<xp:this.value><![CDATA[#{javascript:"#"}]]></xp:this.value>
<xp:this.text><![CDATA[#{javascript:"Label here"}]]></xp:this.text>
</xp:link>