Ember.js 如何将事件对象作为参数传递(从把手模板到控制器中的动作)

Ember.js 如何将事件对象作为参数传递(从把手模板到控制器中的动作),ember.js,event-handling,focus,Ember.js,Event Handling,Focus,我是新来的灰烬,因此我将感谢您的帮助。我想传递一个焦点输出事件,请参见下面我的把手模板中的粗体标记文本: {{input type="text" class="form-control" **focus-out= (action "ccFocusLost" event**) }} 要在控制器中执行操作,请执行以下操作: ccFocusLost : function(**event**) { alert(event.relatedTarget.tagName); }

我是新来的灰烬,因此我将感谢您的帮助。我想传递一个焦点输出事件,请参见下面我的把手模板中的粗体标记文本:

{{input type="text" class="form-control" **focus-out= (action "ccFocusLost" event**) }}
要在控制器中执行操作,请执行以下操作:

   ccFocusLost : function(**event**) {
        alert(event.relatedTarget.tagName);
    },
然而,当我这样做时,我得到一个未定义的值。我需要一种获得焦点输出事件的方法,以便找出在我的主元素丢失焦点后哪个元素将接收焦点

提前谢谢

您可以在控制器中定义focusOut操作处理程序,并使用类表单控件检查事件是否来自输入字段。例如

focusOut(event) {
    /* if event did not come from desired input field, return here */
    /* else call the action as desired to process the focusOut event */
}
或者,您可以创建一个封装输入字段的组件,以便在组件级别而不是控制器级别定义focusOut事件。这样就不需要检查事件是否来自输入字段

有关在Ember中处理事件的更多信息,以下是指南中提供更多详细信息的部分:

两件事

如果使用focusOut而不是focusOut,则操作将自动包含jQuery事件作为参数,无需在模板中指定它。 {{input focusOut=action ccFocusLost}

在代码中,事件已经被传递给操作,只是jQuery事件的relatedTarget属性为null。这是一个jQuery/Javascript事件。另见。
关于相关目标的信息还有很多,但似乎只使用document.activeElement会更好。这很棘手,但下面是解决方案。我有以下代码:

模板不需要有事件参数:

{{input type=text class=form control**focus out=action ccFocusLost}}

控制器:


因此,手柄似乎可以访问事件,而无需将其作为参数发送。在这种情况下,如果我按下id=button1的按钮,警报将显示button1。

参考我的答案,可能会给出一些提示。您无法使用输入帮助器执行此操作。谢谢您的回答。您能给我一个例子,说明如何修改上面的示例,以便我在控制器中获取事件吗?我将尝试使用input helper,如果没有成功,那么我们需要使用以下选项,您可以编写您自己的input helper,它扩展自Ember.TextField和inside focusOut方法,你可以用事件对象调用你的控制器方法。我不能用普通的输入助手实现它。如果您在创建自己的组件时遇到困难,请告知我,谢谢您的回答。你能根据我上面的代码给我一个简单的例子吗?这将是高度赞赏,因为我非常新的余烬创建一个在余烬旋转显示模式,你可以遵循。希望有帮助!很好的例子,非常有用。非常感谢。然而,我所从事的项目相当复杂,他们不需要新的组件。显然有一种方法可以做到这一点:或者,将一个操作分配给模板中的内联事件处理程序,该处理程序创建一个闭包操作并将事件对象作为参数接收。。如果您能为我提供一个实现这一目标的例子,我将不胜感激。我更新了Twiddle,在输入助手上使用内联focusOut处理程序。您可以查看它。我以前的版本是我倾向于遵循的模式,因为它适用于需要处理事件的其他领域。这应该适合你的需要。很好的例子,谢谢。这似乎就是我要找的。但是,在运行此代码时,我收到以下消息:uncaughttypeerror:无法读取未定义的属性“setAttribute”。也许值得一提的是,这个项目使用的是余烬1.13。谢谢你的回答。我试着用focusOut代替focusOut。但是,当运行代码时,我收到以下错误:当运行此代码时,我收到以下消息:UncaughtTypeError:无法读取未定义的属性“setAttribute”。也许值得一提的是,这个项目使用的是ember 1.13。您知道为什么会发生这种情况吗?ccFocusLost:functionevent-从参数中获取它,否则事件可能在Firefox中未定义
      ccFocusLost : function() {    
            var targetId= event.relatedTarget.id;       
            alert(targetId);
        },