编辑:寻找一种在单击按钮以外的任何内容时关闭下拉列表的方法:http: //jsfiddle.net/brennan/s4JTn/
我正在寻找(重新)在我的 ember 应用程序中创建 twitter 的下拉菜单。当单击下拉列表以外的任何内容时,我在尝试关闭下拉列表时特别遇到问题。IE。我正在寻找一种方法来向我的应用程序添加一个事件侦听器,以在单击应用程序主体时关闭我的下拉列表。
这是我的(孩子)观点。
categorySelect: Ember.View.extend({
isOpen: false,
selected: /* removed for brevity */,
content:[
/* removed for brevity */
/* follows structure: {slug: 1, title: 'title', isActive: true} */
],
dropdownToggle: function(e){
var open = this.get('isOpen');
if(open){
this.set('isOpen', false);
}else{
this.set('isOpen', true);
}
},
select: function(e){
var selected = e.context;
this.content.setEach('isActive', false);
this.set('selected', selected);
selected.set('isActive', true);
this.set('isOpen', false);
}
})
这是我的模板代码...
{{#view categorySelect tagName="div" class="btn-group" classBinding="isOpen:open"}}
<a class="btn dropdown-toggle btn-facebook btn-small" {{action "dropdownToggle" on="click"}} href="#">
{{selected.title}}
<span class="caret"></span>
</a>
<ul class="dropdown-menu pull-right">
{{#each content}}
<li {{bindAttr class="isActive:active"}}><a href="#" {{action "select" on="click"}}>{{title}}</a></li>
{{/each}}
</ul>
{{/view}}
我尝试将事件侦听器添加到正文中,如下所示,这是行不通的。如果我单击任何 ember 视图,Ember 似乎会停止传播。因此,如果我直接单击正文,它会起作用,但如果我单击任何视图,它就不起作用:(
didInsertElement: function(){
var self = this;
$('body').on('click', function(){
self.set('isOpen', false);
});
},
寻求帮助和建议。另外,如果上面的任何代码看起来像废话,请告诉我我正在尽可能多地学习。