2014-02-17 2 views
2

Обновление: Я попробовал предложение от @newmount, однако, если я позвоню fireEvent('blur'), тогда фокус триггера не будет срабатывать при любом действии клавиатуры. (Он возобновляет когда есть мыши)extjs triggerfield не срабатывает размытие


Чтобы быть честным triggerfield не срабатывает blur в той или иной ситуации.

Изнутри фокусного события, если у меня есть ссылка на другое поле и сделайте field.focus() размытие текущего поля не срабатывает. Что еще хуже, он срабатывает позже, если я нажму где-нибудь еще.

Ниже кода и шаги для воспроизведения:

Ext.onReady(function() { 

    Ext.define('Ext.ux.CustomTrigger', { 
    extend: 'Ext.form.field.Trigger', 
    alias: 'widget.customtrigger', 
    labelStyle: 'white-space: nowrap', 
    initComponent : function() { 
     this.on("focus", function() { 
      console.log("Trigger focused"); 
      //the problem point. 
      //I do some processing here and then 
      //in some case I do the following: 
      Ext.getCmp('some_field').focus(); 
      //when this is called the BLUR of this trigger field isn't fired. 
     }); 
     this.on("blur", function() { 
      console.log("Trigger blurred"); 
     }); 
     this.callParent(); 
    } 
    }); 
//end of onReady 
}); 

Вот живой скрипкой: http://jsfiddle.net/sq37s/

Репродуцировать:

  • Нажмите в первое поле имя
  • вкладки Hit , он прыгнет в спусковой крючок, а затем прыгнет в середина init.
  • консоль в этот момент будет не показать Trigger размыты
  • Теперь щелкните в любом месте панели, и вы увидите Trigger размыты.

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

Я хотел бы:

  • Любые предложения, чтобы обойти это, возможно, чисто Javascript
  • Любая надежда на получение extjsguys, чтобы исправить это?

ответ

3

Когда фокус изменяется программно, событие может не срабатывать (события, связанные с событиями, срабатывают только при действии пользователя). Один из способов заключается в огонь это событие программно во время переориентацию

this.on("focus", function(e) { 
    console.log("Trigger focused"); 
    if (someConditionToChangeFocus){ 
     e.fireEvent('blur'); //Fires the blur event 
     Ext.getCmp('some_field').focus(); 
    } 
}); 

[Редактировать]

Другой подход заключается в использовании FocusManager в beforecomponentfocus событие, скрипку здесь: https://fiddle.sencha.com/#fiddle/3mq

+0

Я попытался это, смешную вещь, происходит сейчас после того, как «fireEvent» («размытие») «tabing» (или Shift tabbing) обратно в триггер не срабатывает в фокусе! – Kabeer

+0

Привет, спасибо. Я посмотрел на ваш пример, однако аналогичная проблема сохраняется. Когда я ввожу из первого поля, каретка переходит из триггера в 'some_field', однако потерянный фокус _customtrigger не печатается на консоли. Если бы это было какое-то другое поле, скажем текстовое поле, фокус ** и ** размываются события поля. – Kabeer

+1

ну, обновил скрипку, чтобы запустить событие с потерей фокуса. – newmount

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