Файл с JavaScript в текстовом поле (ZK) - PullRequest
0 голосов
/ 28 августа 2018

Я хотел бы переместить этот код ниже в файл, чтобы я мог повторно использовать его в нескольких текстовых полях, не копируя тот же код, просто поместив источник файла в тег текстового поля. Является ли это возможным? Спасибо.

<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>

1 Ответ

0 голосов
/ 30 августа 2018

Вы можете извлечь эту функцию в файл 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" />
...