我想将此代码移到下面的文件中,这样我可以在更多文本框中重用它,而无需复制相同的代码,只需将文件的源放在Textbox标记中即可。可能吗?谢谢。
<textbox id="TBIdFunc" xmlns:w="client">
<attribute w:name="doKeyDown_">
<![CDATA[
function (evt) {
var keyCode = event.keyCode;
if( keyCode == 8 // back space
|| keyCode == 13 // enter
|| keyCode == 16 // enter
|| (keyCode >= 35 && keyCode <= 40) // home, end, arrows
|| keyCode == 46) { // Delete
this.$doKeyDown_(evt);
} else if ( !evt.shiftKey && // only do without shift key
(keyCode >= 65 && keyCode <= 90)) {// teclas A-Z
this.$doKeyDown_(evt);
} else {
evt.stop();
return;
}
}
]]>
</attribute>
</textbox>
答案 0 :(得分:2)
您可以将该函数提取到js
文件中,将此文件加载到zul中,然后引用您的方法。让我们简化一下示例:
<textbox xmlns:w="client">
<attribute w:name="doKeyDown_">
<![CDATA[
function (evt) {
console.log('oh hai!');
this.$doKeyDown_(evt);
}
]]>
</attribute>
</textbox>
首先,在您的webapp文件夹中创建文件keyDown.js
:
function customKeyDown(evt) {
console.log('oh hai!');
this.$doKeyDown_(evt);
}
然后您的祖尔变成了:
<script src="keyDown.js" />
<textbox xmlns:w="client" w:doKeyDown_="customKeyDown" />
如果您想进一步缩短文本框的定义,可以引入标记sclass customKeyDown
(或custom-attribute
),并使用zk.afterLoad()
和zk.override()
覆盖{ {1}}:
doKeyDown_
在zul中,您将仅应用该sclass:
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
}
}
});
});