在ember中绑定控制器中的多个动作

时间:2016-11-26 02:03:50

标签: javascript ember.js handlebars.js

我为一个网站设计了一个模型,该网站的侧栏有一个显示在mouseEnter上的菜单,并在mouseLeave上消失。这是用jQuery模拟的,不过现在我正在尝试使用Ember重新创建这个功能。到目前为止,我已正确使用mouseEnter,但我无法弄清楚如何绑定mouseLeave。

从我到目前为止所看到的,实现一个View似乎是答案,因为视图已被弃用,我不知道如何解决这个问题。

这是我到目前为止所拥有的:

/app/controllers/sidebar.js

import Ember from 'ember';

export default Ember.Controller.extend({
  title: 'Ticket Log',
  menu_showing: false,
  actions: {
    toggleMenu: function () {
      this.set('menu_showing', !this.get('menu_showing'));
      console.log(this.get('menu_showing'));
    }
  }
});

/app/templates/sidebar.hbs

<div {{action "toggleMenu" on="mouseEnter"}} id="sidebar" class="panel panel-default">
  {{#if menu_showing}}
    <div id="sidebar-menu">
      <div id="sidebar-menu-buttons">
        <button id="sidebar-menu-toggle" type="button" class="btn btn-default glyphicon glyphicon-menu-hamburger"></button>
        <button id="sidebar-menu-lock" type="button" class="btn btn-default glyphicon glyphicon-lock"></button>
      </div>
      <div id="sidebar-menu-pills" class="panel panel-default">
        <div class="panel-body">
          <ul class="nav nav-pills nav-stacked">
            <li class="active"><a href="#">Ticket Log</a></li>
            <li><a href="#">Customer Info</a></li>
            <li><a href="#">Asset Info</a></li>
          </ul>
        </div>
      </div>
    </div>
  {{/if}}
  {{title}}
  {{outlet}}
</div>

1 个答案:

答案 0 :(得分:2)

你几乎是对的。不推荐使用Views,但Components不推荐使用View

Ember.Component.extend({
  isMenuShowing: false,

  mouseLeave() {
    this.toggleProperty('isMenuShowing');
  },

  mouseEnter() {
    this.toggleProperty('isMenuShowing');
  },
});