如何从成员控制器或组件观察把手模板中的多个状态
How to observe multiple states in a handlebar template from an ember controller or component
我是ember的新手,正在处理典型的"如何做到这一点"问题。我的方法很简单,我知道怎么做,但我的方法太复杂了,我认为这是不对的。
案例:
<ul>
<li>{{link-to top-level}}</li>
<li>{{link-to another-top-level</li>
<ul class="submenu">
<li>{{link-to submenu</li>
</ul>
</ul>
应该发生的是:
- 单击路线时,相应的列表元素应处于活动状态
- 单击子菜单时,相应的上层ul元素应打开类
对于jQuery来说,这是一个相当简单的例子,但我知道这是不可扩展的、抽象的等等。
因此,我开始采用这种方法:
为整个导航创建一个控制器/模板结构来处理它的状态(我还需要检查其他一些东西,所以它派上了用场)。
由于ember将active类添加到锚标记中,我创建了一个组件来观察:
类似:
export default Ember.Component.extend({
tagName: 'li',
classNameBindings: ['active'],
active: function() {
return this.get('childViews').anyBy('active');
}.property('childViews.@each.active')
});
用{{链表}}替换li元素确实有效。
但接下来呢?我是否需要添加另一个组件来观察该组件以观察活动链接的内置行为?我必须为所有DOM元素编写专用的MVC类吗?
我认为必须有一个更简单的方法。我已经为这样一个简单的行为创建了很多文件,我认为我完全走错了方向。
我的直觉是:这就是视图逻辑,视图应该只观察模板中的几个状态,就这样
解决这个问题最精简的方法是什么?
我不知道我是否理解您的问题,但为什么要将类open
添加到相应的上部元素?它会自动获得活动分配。有了正确的CSS,它应该可以按预期工作。
我创建了一个小例子来说明我的意思。请看一看,让我知道,如果这是你的解决方案,或者你的这个解决方案有什么问题。
http://emberjs.jsbin.com/wifusosadega/7/edit
编辑
这是一个Bootstrap风格的版本:http://emberjs.jsbin.com/wifusosadega/9/edit。
相关文章:
- 事件和状态
- 获取选择框的状态
- 相位器状态未捕获参考错误
- 如何更改reactjs中外部/独立组件的状态或属性
- 如何使用密码检测网络中的状态连接
- Ember.js-接口状态应该存储在哪里
- 混合 ui-sref 和 $state.go 在 Angular ui-router 中进行状态转换
- 在Angular 2中布线期间保持零部件处于活动状态
- 在mvc应用程序中,在回发时保留最初隐藏的文本框的隐藏或可见状态
- XMLHttpRequest未返回值-状态202
- 使用javascript反复检查用户在facebook上的登录状态
- 如何使bxslider仅在移动视图中处于活动状态
- 获取ASP.NET Ajax Timer状态
- React redux初始化功能,无论状态变化如何
- 无法在现有状态转换期间更新-未使用任何非法的setState()
- 悬停下拉菜单即使在鼠标移出后也保持活动状态
- 从组件状态的数组中删除元素
- Web应用程序,将成员状态更新为其他成员
- 如何从成员控制器或组件观察把手模板中的多个状态
- 如何在类成员仍然存在于页面状态时进行编写