首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在ember js中一次只打开一个菜单项?

在 Ember.js 中,可以通过使用组件和状态管理来实现一次只打开一个菜单项的功能。以下是一种实现方式:

  1. 创建一个菜单项组件(Menu Item Component),该组件包含一个标题和一个内容区域。
  2. 在菜单项组件的模板中,使用条件语句(if)来判断当前菜单项是否处于打开状态。
  3. 在菜单项组件的 JavaScript 文件中,定义一个状态变量(isOpen)来表示菜单项的打开状态,默认为 false。
  4. 在菜单项组件的模板中,使用动作(action)来处理菜单项的点击事件。当菜单项被点击时,将状态变量 isOpen 设置为 true,并关闭其他菜单项。
  5. 在菜单组件(Menu Component)中,使用循环(each)来渲染多个菜单项组件。
  6. 在菜单组件的 JavaScript 文件中,定义一个状态变量(activeItem)来表示当前处于打开状态的菜单项,默认为 null。
  7. 在菜单组件的模板中,将菜单项组件的 isOpen 状态绑定到菜单组件的 activeItem 状态,并传递一个动作(toggleItem)给菜单项组件。
  8. 在菜单组件的 JavaScript 文件中,实现 toggleItem 动作,该动作接收一个参数(item),用于切换菜单项的打开状态。在该动作中,将 activeItem 设置为传入的菜单项,以实现一次只打开一个菜单项的效果。

这样,当用户点击菜单项时,只有当前点击的菜单项会打开,其他菜单项会关闭。

以下是一个示例代码:

菜单项组件(menu-item.js):

代码语言:txt
复制
import Component from '@glimmer/component';
import { action } from '@ember/object';

export default class MenuItemComponent extends Component {
  isOpen = false;

  @action
  toggleOpen() {
    this.isOpen = !this.isOpen;
    this.args.toggleItem(this.args.item);
  }
}

菜单项组件的模板(menu-item.hbs):

代码语言:txt
复制
{{#if this.isOpen}}
  <h3>{{@item.title}}</h3>
  <div>{{@item.content}}</div>
{{/if}}
<button {{action this.toggleOpen}}>{{@item.title}}</button>

菜单组件(menu.js):

代码语言:txt
复制
import Component from '@glimmer/component';
import { tracked } from '@glimmer/tracking';

export default class MenuComponent extends Component {
  @tracked activeItem = null;

  @action
  toggleItem(item) {
    this.activeItem = item;
  }
}

菜单组件的模板(menu.hbs):

代码语言:txt
复制
{{#each this.menuItems as |item|}}
  <MenuItem @item={{item}} @toggleItem={{this.toggleItem}} />
{{/each}}

请注意,以上示例代码仅为演示目的,实际使用时可能需要根据具体需求进行适当修改。

推荐的腾讯云相关产品:腾讯云云服务器(CVM)和腾讯云云数据库(TencentDB)。

腾讯云云服务器(CVM)产品介绍链接地址:https://cloud.tencent.com/product/cvm

腾讯云云数据库(TencentDB)产品介绍链接地址:https://cloud.tencent.com/product/cdb

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

单页应用(SPA)开发中的 Top 10 框架

Angular.js AngularJS,Google 的亲儿子,是 JavaScript 框架中一面旗帜,在2009年发布第一版,遵循 MIT 许可开源。...更新那些发生变化的 DOM 节点而不是重绘完整的 DOM 树。 React 另一个优势在于响应式组件带来了很好的重用性,React 组件库创建后可以在多个项目中共用,也能供大众使用。...Ember.js EmberJS 也是一个功能强大的 MVC 框架。Ember 由 Yehuda 在 2011 年发布了第一个开源版本,遵循MIT 许可。...Meteor.js 喜欢使用 JavaScript 开发完整的 web 应用吗?MeteorJS 正是这个神奇的全栈开发平台,让我们可以迅速地开发移动应用和网页应用。...backbone 非常灵活,因为它提供了一个最小的功能集合,开发者在此基础上二开发,自己写代码或者使用第三方的库都可以。还可以在 backbone 的基础上构建一个全功能的框架。

4.2K40

理解 Service Workers

Install 事件 Install 事件会在 Service Worker 第一注册的时候触发,也会在 Service Worker 文件 ( /sw.js) 更新的时候触发(浏览器会自动检测文件变化...比如一个性的操作,为 Service Worker 的工作做好准备;普遍的例子是从安装步骤中载入缓存。...当网页关闭,然后重新打开,浏览器会将旧的 Service Worker 替换成新的,然后触发 Activate 事件,在 Install 事件之后。...对于这个例子来说,如果用户离线,然后点击了 7 按钮,当网络恢复的时候,所有的同步注册都会被合并,且同步事件只会触发一。...ember-service-worker 插件让 Ember.js web 应用很方便的实施 Service Worker;如果您需要有自己的 Service Worker 逻辑,自己编写一个插件来管理事件行为会更容易一些

1.8K21

2016 年 7 个顶级 JavaScript 框架

5.EmberJS 一些令人惊讶的框架,Ember.js,允许你轻松地以更快的速度开发web应用程序。 Ember.js因为很多原因成为了许多开发人员的首选。...其中有一个原因是Ember.js的路由允许你停止阻塞web。使用Ember,你可以获得URL和具备由你创建的每个路径的默认后退按钮,并且API易于使用。...此外,Ember.js和Rails的结合为你编写更丰富、更互动的web app提供了更多的自由,灵活性和快乐。 6.Mithril.js Mithril.js与React.js几乎没有相似的功能。...此外,可自定义的数据绑定和URL路由是Mithril.js令人印象深刻的两个功能。 7.Polymer.JS Polymer是产自Google的另一个JavaScript框架。...重点在于框架的实际功能,以及你如何在自己的开发项目中使用该功能。因此,根据你的项目需要选择顶级的JavaScript框架可以节省时间和金钱。

4.2K10

如何选择前端框架:ANGULAR VS EMBER VS REACT

如果你想开发一个Web app,建议采用Angular,Ember或React三种框架中的一个。这三个框架可以说是安全级别最高,技术非常成熟的框架,而且有很多技术社区支持。...Ember 2.0 Ember.js号称是一个“雄心勃勃”的JavaScript MVC框架、现代JavaScript MVC框架代表,是构造单页面应用等现代Web应用程序的新型Web端开发框架。...有很多App的创建都在使用EmberApple’s properties,Discourse,Ghost。...Ember2.0 特点 Ember 2.0主要改进——移除了之前不建议开发的功能,旨在成为一个瘦身框架。在Ember 1.13上运行的程序,可以无缝切换到Ember 2.0上。...Ember可视为是启动最快的框架。但是Ember 的学习成本较高。就最终App而言,Angular JS 开发的app只需要写很少的代码。 ? 从上图种可以看出,为什么三大框架如此流行,优势都很明显。

2.3K70

React、Vue、Ember 及其他前端开发者,请暂缓更新到 Chrome 59 浏览器

昨天下午休息的时候,发现我工作用的 Mac Mini 在疯狂地散热中,打开 Activity Manger 发现是 Chrome 浏览器导致的,再打开 Chrome 的 Task Manager 发现是...于是,我: 新起了一个用户进程,发现没有这个问题 把自用的浏览器插件都禁掉,发现正常 关了 Developer Tool,也发现不会出现这个情况 便怀疑是插件的问题,然后就手动地一个个开启,发现是 React...React DevTool main.js 修改时间 那么,问题就出现在 setInterva 方法里。...因此 如果你最近用的 Chrome 59 也异常,请禁用 React、Vue、Ember 等开发者工具。...如果你最近用的 Chrome 59 也异常,请禁用 React、Vue、Ember 等开发者工具。 你呢,中招没?

829100

简单地建立Ember CLI Addons

Ember CLI将会读取 lib/ember-addon-main.js并且使用其输出的构造器结合 treeFor和 included方法创建一个实例。...# Write ember-addon-main.js 我将使用ember-cli-super-number中的 ember-addon-main.js。如果你想查阅完整的文件,阅读这里。.../styles/style.css'); }; treeFor方法分别会为 app、 styles、 vendor调用一。...这允许我们通过添加 -addon构建tree(在ember-addon-main脚本中)返回treeFor相关的文件, 同时还能保持应用像之前一样在本地运行。 这有两个好处。...另一个选择是整合 app和 tests/dummy目录。在这种情况下,我们也可以达到同样的目的,但 app目录将包含addon文件,而 tests/dummy将包含其余的Ember CLI应用程序。

99620

【译】理解Service Worker

原文最后讲了在Ember.js框架上的实践介绍,因为原作者是Ember.js的拥趸,但鉴于国内React、Vue、Angular居多(不要引起战争,害怕.jpg),译文就省略那部分内容了。 ?...注册 下方的代码描绘了如何在浏览器客户端当中注册你的Service Worker。...一个 /js/sw.js 这样的路径只会捕获到 http://localhost:3000/js 下的请求。...Install事件 Install事件是在你的Service Worker第一注册以及SW文件(/sw.js)发生变化的时候触发的(浏览器会自动鉴别是否发生改变了)。...利用安装事件,可以实现你的SW初始化逻辑,或者说通过执行一的命令来设定你的SW初始状态。一种常见的用法是在安装阶段提权准备好缓存。

99330

​在tinycolinux上安装sandstorm davros

,它用类似docker的方式为每个应用准备一个沙盒环境,但在管理框架级---也就是sandstorm自身---它本身就是一个js应用,维护所有app产生的实例(grains)数据备份,打包,它的grains...为了让它成为一个纯粹的类oc的只管理js web apps的项目,其实可以把sandstorm关于paas的部分截取去掉,(比如将其放在xaas层次的VM管理中做一个管理入口到sandstorm,这样sandstorm...,保证它的生态下全是类davros之类的js应用,共用一个类似mean的单appstack,且纯粹面向webapps 《elmlang》后,我们关注了大web的js语言,而且还将基于一体化存储后端的webapp...,发现ember的确在后台打开了守护,根据github的readme.md说明,这时本地桌面客户端可以连接了。...按理说,这里要ember build一,之后会将ember一系列东西,包括davros src root的app文件夹下面的东西全打包在生成的srcroot/dist下一个davros打头的随机文件名中

80820

大杀器Bodymovin和Lottie:把AE动画转换成HTML5AndroidiOS原生动画

2.3 下载安装ZXP Installer(链接:ZXP Installer),打开软件,点击“File”>“Open”菜单项载入上述.zxp插件包,ZXP Installer会自动开始安装。...打开AE,点击“编辑”>“首选项”>“常规”菜单项,选中“允许脚本写入文件和访问网络”,点击确定。 ? 4....点击“窗口”>“扩展”>“Bodymovin”菜单项,就可以打开Bodymovin的界面使用插件了。 ? 5. 我们在空的AE项目里,新建一个名为“合成1”的合成,并制作一段简单的动画: ? 6....接下来我们新建一个网页来播放这段动画。...把Bodymovin的GitHub项目目录下的“\build\player\bodymovin.js”和刚刚生成的json文件复制到网页根目录,新建一个html文件,代码如下: <!

5.7K22

electron 自定义菜单

菜单模板是一个包含菜单项的数组,每个菜单项都有自己的属性,标签(label)、快捷键(accelerator)、角色(role)和点击事件(click)等。...菜单项属性: label:菜单项显示的文本。 accelerator:为菜单项指定快捷键,允许用户使用键盘快速访问菜单项。 click:菜单项被点击时触发的回调函数。...submenu:指定一个子菜单,允许创建层级嵌套的菜单。 分隔线和标签:通过在菜单模板中使用 type: 'separator' 可以添加分隔线,用于在菜单中分隔不同的菜单项。...通过监听特定的事件( contextmenu),可以在合适的时候显示自定义的上下文菜单。...下面是一个例子: // 主进程 main.js const { app, BrowserWindow, Menu, ipcMain } = require('electron') const path

24210

10个最受欢迎的 JavaScript 框架,以及它们的主要特征和功能

有超过五十万个网站 google.com、youtube.com 等正在使用 Angular。...单向数据流:React.js 的设计方式使其支持在一个流程中向下游传递的数据。如果数据必须向另一个方向流动,则需要其他功能支持。...Ember Ember一个开源的 JavaScript Web 框架,它允许开发人员通过将最佳实践合并到框架中来构建可伸缩的单页面 Web 应用。...Ember cli:EmberEmber-CLI 完全是两个不同的东西,但如果没有另一个则两者都不完整。 Ember-CLI 是一个命令行实用程序,它与 Ember 框架的软件栈一起提供。...Meteor 捆绑了几个内置功能,反应式模板、自动 CSS 等。 智能包:为你的应用开发登录系统可能会很麻烦。但 Meteor 不会。

3.7K10

2015.5 技术雷达 | 语言和框架篇

(点击图片可查看大图) 自从我们上一在技术雷达中提到 Nancy (nancyfx.org) 之后,它已然成为了我们在项目上的默认选择。...React.js一个 UI/View 框架,在这个框架中,Javascript 函数在一个响应式的数据流中生成 HTML。...我们也推荐评估一些其他类似的框架,在这一版的雷达中我们提出 Ember.js,它在 ThoughtWorks 内部也逐渐变得流行。...Ember 被人称道的是,它对于惯例胜于配置非常固执己见,并且有着响应迅速的核心开发团队,其性能不错并且有一套基于 ember-cli 的构建工具。...有些问题,过长的编译时间,已经得到了解决。然而,持续的语言的变化会导致额外的开发工作,并使得构建你自己老版本的软件非常繁琐。测试和重构也依然痛苦。

906100

何在Ubuntu Dash隐藏应用程序?

这个简短的指南说明了如何在Ubuntu dash中隐藏应用程序。...当您在Ubuntu桌面系统上安装新应用程序时,将创建一个相应的菜单项(即启动器)并将其放置在Dash或Application菜单中以便快速访问。...如果打开.desktop条目文件,例如vlc.desktop; $ cat /usr/share/applications/vlc.desktop 您将看到相应应用程序的详细配置信息。 ?...如果您希望隐藏其中一个程序菜单项以使其不显示在Ubuntu Dash中,可以按照以下步骤操作。我在Ubuntu 18.04桌面上测试了该指南,它工作的和预期的一样好。...例如,我将向您展示如何在Ubuntu dash中隐藏vlc应用程序。 在破折号中键入“ vlc”时,你会看到下面的启动器图标,如下所示。 ?

3K10

定制 Fiddler 之将请求发往另一服务器

需求 对 Fiddler 抓取的某个特定 SESSION 能在必要时手动操作发往另一个服务器。 设想 在 SESSION 上点击右键弹出的菜单中添加一项,让它对应的响应事件来完成此操作。...最终在 CustomRules.js 文件中添加了如下代码即可。...,会发现 Fiddler 界面右边的 Composer 标签已打开,然后 hostname 已经替换为mazhuang.org,这时再手动点击 Execute 按钮即可将更改 hostname 后的请求重新发出...一操作需要点选右键菜单项后再点击一 Composer 窗口中的 Execute 按钮才能完成,比较理想的状况是点选右键菜单后即完成替换 hostname 且重新发出请求。...附注 我使用的完整最新的 CustomRules.js 文件我上传到了一个 Gist 里,详见:https://gist.github.com/mzlogin/3c5f9781c5bedff3fcfb,

58720

定制 Fiddler 之将请求发往另一服务器

需求 对 Fiddler 抓取的某个特定 SESSION 能在必要时手动操作发往另一个服务器。 设想 在 SESSION 上点击右键弹出的菜单中添加一项,让它对应的响应事件来完成此操作。...最终在 CustomRules.js 文件中添加了如下代码即可。...,会发现 Fiddler 界面右边的 Composer 标签已打开,然后 hostname 已经替换为mazhuang.org,这时再手动点击 Execute 按钮即可将更改 hostname 后的请求重新发出...一操作需要点选右键菜单项后再点击一 Composer 窗口中的 Execute 按钮才能完成,比较理想的状况是点选右键菜单后即完成替换 hostname 且重新发出请求。...附注 我使用的完整最新的 CustomRules.js 文件我上传到了一个 Gist 里,详见:https://gist.github.com/mzlogin/3c5f9781c5bedff3fcfb,

53520

学透 Electron 自定义菜单

打开微信开发者工具,可以通过下图,很清晰的发现3个菜单所处的位置。 ?...Dock 菜单:在 OSX 系统才有,通常功能较少,提供特别常用的功能。 了解了菜单的基本概念后,接下来我们一起看看如何通过代码去实现自定义菜单的功能。...这里值得注意的是:对于 OSX 而言,应用菜单的第一个菜单项是应用程序的名字,会使得 Edit App 这个菜单被覆盖掉。...app.quit(); } } ] }); } 分隔符: 通过 type: 'separator' 可以在两个菜单项之间定义一个分隔符...完整的 Role 可以查看:https://electronjs.org/docs/api/menu-item#roles 子菜单: 我们在前面的基础上增加一个新的菜单 Sub Menu,可以看到这个菜单里面的菜单项新增了

2.4K50

使用 WordPress 的导航菜单

而 WordPress 3.0 的其中一个非常重要的功能是一个全新的菜单管理系统,这个系统可以让我们创建包含由日志,页面,分类,标签和其他链接组成的完全自定义菜单,并且还支持多级菜单,非常方便和强大,今天就谈谈如果使用...菜单项:可以对具体的菜单项进行配置,比如设置是否新窗口打开,这个菜单项标题,描述,Class 等等。...这里我们注册一个导航菜单的主题位置: register_nav_menu( 'nav-menu', '导航菜单'); nav-menu 是这个导航菜单的名字,用来在函数中定义身份的,而“导航菜单”则是名称...接下来就是添加和配置菜单项。...: #menu-nav li.current-menu-item, #menu-nav li.current-menu-parent, #menu-nav li:hover { background

1.9K10
领券