2015-01-06 2 views
0

В моем ExtJS 5 приложения Я использую Ext.ux.IFrame -компонент на дисплеи новостей HTML документ из интрасети. Когда я нажимаю backspace или alt + left/right, запускается история навигации браузера, и приложение загружает новое.ExtJs 5 - задвижка KeyDown событие Ext.ux.IFrame

Чтобы предотвратить эти поведения за пределами фрейма, я приложил KeyDown слушателя к документу

Ext.onReady(function() { 
    var documentObj = Ext.getDoc(); 
    documentObj.on('keydown', globalKeyDown); 
}); 

В обратный вызов я прекращаю эти события

globalKeyDown: function (event, targetDomEle) { 
    var eventKey = event.getKey(); 

    switch (eventKey) { 
     case event.BACKSPACE: 
      if ((!/^input$/i.test(targetDomEle.tagName) && 
        !/^textarea$/i.test(targetDomEle.tagName)) || 
        targetDomEle.disabled || targetDomEle.readOnly) { 
       event.stopEvent(); 
      } 
      break; 
     case event.LEFT: 
     case event.RIGHT: 
      if (event.altKey) { 
       event.stopEvent(); 
      } 
      break; 
    } 
} 

Но когда я пытаюсь сделать то же самое для iframe метод прослушивания его в структуре ExtJs работает не так, как ожидалось.

Ext.application({ 
    name: 'Test', 
    requires: ['Ext.ux.IFrame'], 
    launch : function() { 

     var info = new Ext.Component({ 
      renderTo: document.body, 
      html: 'above the iframe', 
      width: 350, 
      padding: '0 0 20 0', 
      margin: '0 0 1 0', 
      style: { border: 'solid 1px blue' }, 
     }); 

     var iframe = Ext.create('Ext.ux.IFrame',{ 
      style: { border: 'solid 1px red' }, 
      width: 350, 
      height: 350, 
      renderTo: document.body 
     }); 

     var iframeDoc = iframe.getDoc(); 
     var iframeDocEl = Ext.get(iframeDoc); 

     iframeDocEl.on('keydown', function(){ 
      console.log('iframeDoc.on callback'); // <-- never executed 
     }); 

     iframeDoc.onkeyup = function(){ 
      console.log('onkeyup callback') // <-- works just fine 
     }; 
    } 
}); 

Почему iframeDocEl.on('keydown', ... не работает для этого случая? Метод iframeDoc.onkeyup - это всего лишь обходное решение, потому что в обратном вызове я хочу использовать объект события framework для кросс-браузера (IE8 +).

Благодарим за любые предложения.

Сценарий можно найти по адресу Sencha Fiddle.

ответ

1

Источник Ext.ux.Iframe не имеет событий, которые запускаются из самого iframe. Поэтому он не поддерживает эту функцию. Некоторое время назад был проект ManagedIframe, который дал больше возможностей, но он был поддержан только в ExtJS 3.

Возможно, стоит поискать на форумах Sencha, чтобы выяснить, попытался ли кто-либо обновить это расширение для совместимости с ExtJS 5.

 Смежные вопросы

  • Нет связанных вопросов^_^