什么"无法在冻结模式中发现"意思?

时间:2014-09-18 16:24:00

标签: javascript enyo

我正在使用enyojs 2.4和月光石库。

“无法在冻结模式下发现”是什么意思?

我有两个输入:

{kind: "moon.InputDecorator", name: "emaildec", spotlight: true, defaultSpotlightLeft : "emaildec", components: [
     {kind: "moon.Input", name: "username",placeholder: "e-mail address", onchange: "nameChanged", value:"",classes: "input-style"} //,spotlight: true
   ]
}, 
{tag: "br"},
{kind: "moon.InputDecorator",  name: "pwddec" , spotlight: true, defaultSpotlightLeft : "pwddec", components: [
     {kind: "moon.Input", name: "userpwd",type:"password", placeholder: "ameba password", onchange: "passwordChanged", value: "",classes: "input-style"} //,spotlight: true
   ]
}

当我尝试将注意力设置在密码输入上时,抛出此控制台错误:

 enyo.Spotlight.spot(this.$.userpwd);

我想要发生的是:

  • 用户使用屏幕键盘填写第一个输入
  • 用户然后导航以在屏幕键盘上输入按钮并按下ok / enter on remote control
  • 焦点设置为第二个输入。

3 个答案:

答案 0 :(得分:3)

moon.InputDecorator会在模糊事件(来自moon.Input)时自动解冻Spotlight,然后你可以调用enyo.Spotlight.spot()。 moon.Input在检测到按下Enter键时会自动模糊,但仅当月亮上的dismissOnEnter标志设置为true时才会自动模糊。听起来你可能实际上想要将焦点调用到所需的月亮。输入(而不是发现,因为它只会在月亮上显示Spotlight悬停状态.InputDecorator而不是实际发现它),类似这样的事情({{3} }):

enyo.create({
handlers: {
    onblur: 'blurHandler'
},
components: [{
    kind: "moon.InputDecorator",
    name: "emaildec",
    spotlight: true,
    defaultSpotlightLeft: "emaildec",
    components: [{
            kind: "moon.Input",
            name: "username",
            placeholder: "e-mail address",
            onchange: "nameChanged",
            value: "",
            classes: "input-style",
            dismissOnEnter: true,
        } //,spotlight: true
    ]
}, {
    tag: "br"
}, {
    kind: "moon.InputDecorator",
    name: "pwddec",
    spotlight: true,
    defaultSpotlightLeft: "pwddec",
    components: [{
            kind: "moon.Input",
            name: "userpwd",
            type: "password",
            placeholder: "ameba password",
            onchange: "passwordChanged",
            value: "",
            classes: "input-style"
        } //,spotlight: true
    ]
}],
blurHandler: function (sender, event) {
    if (event.originator === this.$.username) {
        this.$.userpwd.focus();
    }
}
}).renderInto(document.body);

答案 1 :(得分:1)

我并不完全确定“为什么”,但是看一下Spotlight来源,看起来当控件被发现时,冻结模式就会打开。现在,我猜它应该在你试图找到一个新的时候关闭,但它不会这样做。

您可以尝试:enyo.Spotlight.unfreeze();然后在第二个控件上设置斑点,但我没有测试它以查看是否存在意外的副作用。

答案 2 :(得分:0)

根据enyo论坛上的@dmikeyanderson:

  

这意味着聚光灯已在控件上冻结,直到   解冻聚光灯不能移动。似乎没有任何错误   使用您的组件,您还有更多代码要分享吗?

根据enyo论坛上的@aarontam:

  

Hi @ Fabii23,moon.InputDecorator将自动解冻   聚焦模糊事件(来自moon.Input),然后你可以   致电enyo.Spotlight.spot()。 moon.Input会自动模糊   当它检测到按下Enter键时,但仅限于   在moon.Input上将dismissOnEnter标志设置为true。听起来像你   可能实际上想要将焦点调用到所需的moon.Input(相反   发现,因为它只会显示Spotlight悬停状态   月亮.InputDecorator并没有真正发现它),就像这样   (基于@ dmikeyanderson的小提琴)