Knockout在单击时切换活动类
Knockout toggle active class on click
我有一个淘汰应用程序,其中有一个功能,可以根据所选选项显示/隐藏页面上的元素。已选择用于激活特定切换的按钮将具有一个"活动"类,以便它从其他按钮中"脱颖而出",并且可以清楚地看到这是所选选项。我的问题是,我创建了一个敲除函数来切换活动类,但它触发了所有按钮的活动状态,而不是所选按钮,我不知道为什么?
var viewModel = function(){
var self = this;
self.isActive = ko.observable(false);
self.toggleActive = function(data, event){
self.isActive(!self.isActive()); //toggle the isActive value between true/false
}
}
<button data-bind="click: toggleActive, css : {'activeStyle' : isActive}">Toggle Active</button>
<button data-bind="click: toggleActive, css : {'activeStyle' : isActive}">Toggle Active</button>
<button data-bind="click: toggleActive, css : {'activeStyle' : isActive}">Toggle Active</button>
Fiddle:http://jsfiddle.net/amMup/5/
所有三个按钮只有一个视图模型。这意味着你只有一个所有按钮都绑定到的"isActive"标志
相反,使用一个项数组和foreach循环来渲染每个项。以下是您的视图模型的调整版本:
var viewModel = function(){
var self = this;
self.items = [
{ isActive: ko.observable(false) },
{ isActive: ko.observable(false) },
{ isActive: ko.observable(false) }
];
self.toggleActive = function(data, event){
data.isActive(!data.isActive());//toggle the isActive value between true/false
}
}
var myModel = new viewModel();
ko.applyBindings(myModel);
HTML被简化了:
<div data-bind="foreach: items">
<button data-bind="click: $parent.toggleActive, css : {'activeStyle' : isActive}">Toggle Active</button>
</div>
请注意使用$parent
来访问父级的绑定上下文。当您在foreach循环内时,绑定上下文是从foreach循环中提取的单个项。通过访问$parent
,您可以"接触"到包含items
属性的对象——在您的情况下,它是存在toggleActive
的视图模型。
这是一个更新的小提琴:http://jsfiddle.net/psteele/amMup/6/
这是因为它们都绑定到同一个可观察对象。
http://jsfiddle.net/Kohan/fdzqJ/
Js
var viewModel = function(){
var self = this;
self.isActive1 = ko.observable(false);
self.isActive2 = ko.observable(false);
self.isActive3 = ko.observable(false);
self.toggleActive = function(data){
data(!data());
}
}
var myModel = new viewModel();
ko.applyBindings(myModel);
HTML
<button data-bind="click: function(){toggleActive(isActive1)}, css : {'activeStyle' : isActive1}">Toggle Active</button>
<button data-bind="click: function(){toggleActive(isActive2)}, css : {'activeStyle' : isActive2}">Toggle Active</button>
<button data-bind="click: function(){toggleActive(isActive3)}, css : {'activeStyle' : isActive3}">Toggle Active</button>
另一种方式:
<button data-bind="click: function(){setActive('1')}, css: buttonActive() == '1' ? 'active' : '' ">Toggle Active</button>
var viewModel = function(){
var self = this;
self.buttonActive = ko.observable(false);
self.buttonActive = function(index){
self.buttonActive(index);
}
}
var myModel = new viewModel();
ko.applyBindings(myModel);
相关文章:
- 在动态crm 2011中,右键单击已完成活动的只读文本时,您是否出现错误
- 单击ng更改列表项的活动bg颜色
- 单击我网站中的链接时打开新选项卡,保持当前选项卡处于活动状态
- 在页面加载时创建/设置活动的默认链接,但在单击其他链接时删除活动链接
- 创建一个复选框按钮的散列,这些按钮在单击时在Twitter Bootstrap Button组中处于活动状态
- 我可以从代码后面更改按钮单击上的Jquery ui活动选项卡吗
- 如何获取活动时移动的输入元素的单击事件
- 如何在单击区域 HREF 标签时创建活动事件(更改 BG 或创建边框)
- 单击选项卡时,页面会在活动后向下跳转
- 引导手风琴,单击时滚动到活动(打开)手风琴的顶部
- 单击元素时,JQuery 不会更改具有“活动”类的元素
- Ionic:单击两次时显示活动/非活动按钮
- 使用 Jquery 单击菜单链接时,激活或添加菜单选项卡上的类活动
- 如何知道单击了哪个按钮,以便我可以在同一活动中打开网页
- JavaScript 下拉菜单在单击时处于活动状态,在外部单击时不活动
- 仅当单击其他按钮时,才使按钮处于非活动状态
- 活动选项卡单击问题
- 当用户单击子菜单并在新页面中打开时,子菜单将保持活动状态
- 单击后的活动链接
- 猫头鹰轮播 2 - 单击幻灯片时处于活动状态拖动