如何在EmberJS中基于数组和值绑定attr类活动
How to bind-attr class active in EmberJS based on an array and a value?
我有一个mode
数组,并希望根据active属性设置active li
。
mode: ['list', 'grid', 'table'], // dynamic values
active: 'list',
输出:<ul>
{{#each mode}}
<li {{bind-attr class="?:active"}}>
<a href="#">{{this}}</a>
</li>
{{/each}}
</ul>
我将把什么放在绑定属性部分,以便如果active
属性设置在任何一个mode
数组上,它将在li
上绑定一个活动类?
请帮。
创建子控制器并添加一个computed属性来指示是否活动:
ul控制器(为了简单起见,这里使用ApplicationController):
App.ApplicationController = Ember.ObjectController.extend({
mode: ['list', 'grid', 'table'],
active: 'list'
});
li控制器:
App.LiController = Ember.ObjectController.extend({
needs: ['application'],
isActive: function() {
return this.get('controllers.application.active') === this.get('model');
}.property()
});
模板:
<ul>
{{#each mode itemController="li"}}
<li {{bind-attr class="isActive:active"}}>
<a href="#">{{model}}</a>
</li>
{{/each}}
</ul>
JSBin
为什么我需要另一个控制器?
从ember的文档中,它说:
在Ember.js中,控制器允许你用显示逻辑装饰你的模型。一般来说,你的模型会有保存到服务器的属性,而控制器会有不需要保存到服务器的属性。
所以,额外的控制器的唯一目的是保持isActive
属性。
{{content}}
是干什么用的?
content
表示控制器的底层对象,在本例中是字符串字面值。它不是一个保留关键字,它是控制器的属性。
我更新了我的答案,使用model
而不是content
,实际上它们是一样的,你应该总是使用model
属性。参见这个问题
相关文章:
- 在VanillaJS中模拟模型双向数据绑定
- 无法通过数组映射绑定
- 主干-不管怎样,检查事件以前是否绑定过
- 用于搜索的聚合物嵌套绑定
- Angular:更新一次性绑定的数据
- 如何使用ngrepeat和双向绑定获得指令的隔离范围
- react.js中的密钥绑定
- 使用regex的jquery keydown绑定不会验证撇号和句点
- Ember组件:将attr绑定到每个属性中
- 在绑定或删除点击时 ATTR 失败
- KNOCKOUTJS - 嵌套在模板中的自定义绑定,ATTR 尚未在自定义绑定调用中绑定
- 通过 ATTR 数据绑定的 i18n 文本未显示
- Knockout JS href attr 未绑定在 .NET MVC4 部分页面上
- IE8抛出“;不支持此命令“;使用attr类型对数据绑定使用敲除时出错
- AJAX调用后的Attr绑定(knockoutjs)
- 数据绑定”;attr”;不会'不起作用
- Knockout JS模板attr href绑定返回函数而不是值
- 如何在EmberJS中基于数组和值绑定attr类活动
- 自定义指令attr绑定不起作用
- 敲除中的Attr绑定问题