Javascript 禁用渲染中的pointermode时,moon.inputDecorator“第二次”上没有聚光灯
我在开发示例应用程序时遇到了这个问题。我正在共享的JSFIDLE链接有一个基本功能,即单击按钮打开弹出窗口。因为渲染函数在创建时只被调用一次,所以禁用pointermode和spot第一次工作。但为什么每次enyo都需要禁用指针模式并将spot设置为组件开发人员想要的位置呢 我的要求是,每当弹出窗口打开对话框时,聚光灯都应位于我指定的组件上。它可能是popup中的第一个组件,或者是开发者指定的组件,我可能不知道有其他方法可以做/接近相同的事情,所以请让我知道 以下是JSFIDLE链接:Javascript 禁用渲染中的pointermode时,moon.inputDecorator“第二次”上没有聚光灯,javascript,enyo,spotlight,Javascript,Enyo,Spotlight,我在开发示例应用程序时遇到了这个问题。我正在共享的JSFIDLE链接有一个基本功能,即单击按钮打开弹出窗口。因为渲染函数在创建时只被调用一次,所以禁用pointermode和spot第一次工作。但为什么每次enyo都需要禁用指针模式并将spot设置为组件开发人员想要的位置呢 我的要求是,每当弹出窗口打开对话框时,聚光灯都应位于我指定的组件上。它可能是popup中的第一个组件,或者是开发者指定的组件,我可能不知道有其他方法可以做/接近相同的事情,所以请让我知道 以下是JSFIDLE链接: 除了这样
除了这样做的初始重点,有没有其他方法实现同样的目标 您必须禁用指针模式的原因是,当用户移动指针时,您无法成功地发现某些内容,因为这可能会导致该点从悬停的控件跳到其他位置,然后再跳回来。如果禁用指针模式,则会发生这种情况 您可以在不将指针模式设置为false的情况下调用spot,如果用户至少在最新代码中切换回5路,则spot控件将成为焦点控件 编辑:我应该补充一点,当moon.input有焦点时,它不会显示聚光灯高光。如果希望输入立即“可输入”,则可能需要将焦点设置在输入上。此外,您还应该查看moon.Popup的源代码,因为它进行了一些特殊处理,以防止聚光灯从弹出窗口漏出
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);