2014-12-22 13 views
0

샘플 응용 프로그램을 개발하는 동안이 문제가 발생했습니다. 공유하고있는 jsfiddle 링크에는 버튼 클릭시 팝업을 여는 기본 기능이 있습니다. 렌더링 된 함수는 생성하는 동안 한 번만 호출되기 때문에 포인터 모드를 비활성화하고 처음으로 작동합니다. 하지만 언제나 enyo가 포인터 모드를 비활성화하고 개발자가 원하는 구성 요소에 자리 잡는 것이 필요한 이유는 무엇입니까?moon.inputDecorator에 스포트라이트가 없습니다. 렌더링시 포인터 모드를 비활성화하는 동안 "SECOND TIME"

내 요구 사항은 팝업이 대화 상자를 열 때마다 지정한 구성 요소에 스포트라이트가 있어야한다는 것입니다. 팝업 또는 개발자가 지정한 첫 번째 구성 요소 일 수 있습니다. 다른 방법을 알고있을 수는 없으므로 동일하게 접근하십시오. 알려 주시기 바랍니다. 그렇다 초기 초점을하는이 방법에서

http://jsfiddle.net/pL1cawnw/1/

enyo.kind({ 
name:'app', 
kind:'enyo.Control', 
components:[ 
    {name:'popupBtn',kind:'moon.Button', content:'Open', ontap:'btnTapped'}, 
    {name:'popupBtn2',kind:'moon.Button', content:'Dummy'}, 
    {name:'inputPopUp', kind: 'inputPop'} 
], 
btnTapped:function(){ 
    this.$.inputPopUp.show(); 
}, 
rendered: function(){ 
    this.inherited(arguments); 
    enyo.Spotlight.setPointerMode(false); 
    enyo.Spotlight.spot(this.$.popupBtn);  
} 
}); 
enyo.kind({ 
name:'inputPop', 
kind:'enyo.Popup', 
center:true, 
scrim:true, 
floating:true, 
components:[ 
    {name:'inputDecorator', spotlight: true, kind:'moon.InputDecorator', style:'width:200px; height: 80px', components:[ 
     {kind:'moon.Input', name:'input', dismissOnEnter:true} 
    ]} 
], 
create:function(){ 
    this.inherited(arguments); 
}, 
rendered: function(){ 
    this.inherited(arguments); 
    enyo.Spotlight.setPointerMode(false); 
    enyo.Spotlight.spot(this.$.inputDecorator); 
} 
}); 
new app().renderInto(document.body); 

, 동일한 달성의 다른 방법이 여기있다 :

는 jsfiddle 링크입니다?

답변

0

포인터 모드를 해제해야하는 이유는 사용자가 포인터를 이동하는 동안 무언가를 성공적으로 발견 할 수 없기 때문입니다. 포인터가 컨트롤에서 점프하여 다른 곳으로 이동 한 후 다시 돌아올 수 있기 때문입니다. 포인터 모드를 사용하지 않으면이 문제가 발생합니다.

포인터 모드를 false로 설정하지 않고 spot을 호출 할 수 있으며 사용자가 5 방향 (최소한 최신 코드)으로 전환하면 스포트 된 컨트롤이 포커스가있는 컨트롤이됩니다.

편집 : moon.input에 포커스가있을 때 스포트라이트 하이라이트가 표시되지 않습니다. 바로 '입력 가능'으로 원한다면 입력에 초점을 맞추어야 할 수도 있습니다. 또한, 달의 출처를 살펴 봐야합니다 .Popup은 스포트라이트가 팝업에서 새어 나가는 것을 방지하기 위해 몇 가지 특별한 처리를 수행합니다.