Вы можете извлечь эту функцию в файл js
, загрузить этот файл в zul, а затем сослаться на ваш метод. Давайте упростим вам пример:
<textbox xmlns:w="client">
<attribute w:name="doKeyDown_">
<![CDATA[
function (evt) {
console.log('oh hai!');
this.$doKeyDown_(evt);
}
]]>
</attribute>
</textbox>
Сначала создайте файл keyDown.js
в папке вашего веб-приложения:
function customKeyDown(evt) {
console.log('oh hai!');
this.$doKeyDown_(evt);
}
Тогда ваш зул становится таким:
<script src="keyDown.js" />
<textbox xmlns:w="client" w:doKeyDown_="customKeyDown" />
Если вы хотите еще больше сократить определение текстового поля, вы можете ввести маркерный класс customKeyDown
(или custom-attribute
) и использовать zk.afterLoad()
и zk.override()
для переопределения doKeyDown_
в целом:
zk.afterLoad('zul.inp', function applyCustomKeyDown() {
var xTextbox = {};
zk.override(zul.inp.Textbox.prototype, xTextbox , {
doKeyDown_: function (evt) {
if (jq(this).is('.customKeyDown')) {
console.log('oh hai!');
xTextbox.doKeyDown_.apply(this,arguments); // call original
} else {
xTextbox.doKeyDown_.apply(this,arguments); // call original
}
}
});
});
В зуле вы примените только этот класс:
<textbox sclass="customKeyDown" />