在我看来,我有一个与元素绑定的动作。此操作会更改属性,并且我在视图上有一个方法,该方法会观察属性并对其更改进行操作。然后,此方法将单击处理程序分配给window
。我遇到的问题是window
上的点击处理程序被初始操作的点击触发了。
我在这里做错了什么?
编辑:
// hbs file
<span class="icon-account" {{action 'showMenu' target="view"}}></span>
// view file
menuShowing: false,
menuShowingHandlers: function() {
var MENU_CLICK = 'click.AccountMenu';
if (this.get('menuShowing')) {
// Close menu if anywhere in window is clicked
$(window).on(MENU_CLICK, _.bind(function(){
this.set('menuShowing', false);
}, this));
// Don't close menu if menu is clicked
this.$().on(MENU_CLICK, function(evt) {
evt.stopPropagation();
});
} else {
// Remove listeners
$(window).off(MENU_CLICK);
this.$().off(MENU_CLICK);
}
}.observes('menuShowing'),
actions: {
showMenu: function () {
this.set('menuShowing', true);
}
}
最初,调用showMenu
,将属性设置为true
。然后调用menuShowingHandlers
,此时,处理程序被分配给window
。但是,立即调用window
上的处理程序,从而将menuShowing
重置为false。