我是Ember的新手,因此,我将感谢您的帮助。我想从我的车把模板中传递一个聚焦事件(请参阅下面的大胆标记文本(:
{{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") }}
控制器:
ccFocusLost : function() {
var targetId= event.relatedTarget.id;
alert(targetId);
},
因此,似乎车把可以访问事件,而无需将其作为参数发送。在这种情况下,如果我按一个带有ID = button1的按钮,警报将显示按钮1。
您可以在控制器中定义focusOut
操作处理程序,并检查事件是否来自您的input
字段,其中包括" form-control"。例如
focusOut(event) {
/* if event did not come from desired input field, return here */
/* else call the action as desired to process the focusOut event */
}
另外,您可以创建一个包装输入字段的组件,以便可以在组件级别而不是控制器上定义焦点事件。这将消除检查事件是否来自输入字段的需求。
有关Ember处理事件的更多信息,这是指南的部分,提供了更多详细信息:处理事件
两件事
- 如果您使用
focusOut
而不是focus-out
,则操作将自动包含jQuery事件作为参数,无需在模板中指定它。
{{input focusOut=(action "ccFocusLost") }}
- 在您的代码中,该事件已经传递给您的操作,只是jQuery事件的相关属性是无效的。这是与Ember无关的jQuery/javascript事件。另请参阅此处。
有很多有关关联的信息,但似乎最好只使用document.activeElement