如何在Knockout.js中基于绑定值隐藏按钮
How to hide a button in Knockout.js based on bound value
我的HTML模板中有以下按钮,我只想显示CanCancel
是否为真:
<button data-bind="click: CancelProject, visible: CanCancel">Cancel Project</button>
问题是模型需要1-2秒来绑定,所以我实际上看到按钮几秒钟,然后当数据完全绑定时它消失了。我想要按钮被隐藏,然后出现如果CanCancel
是真的。
我尝试使用CSS来设置按钮的初始状态:
<button class="hidden" data-bind="click: CancelProject, visible: CanCancel">Cancel Project</button>
在我的CSS中:
DIV.buttons button.hidden { display: none; }
然而,当我这样做的时候,我从来没有看到按钮。这是因为如果该值为true, Knockout.js将不会用display: inherit;
覆盖按钮的内联样式。
是否有一种方法可以让Knockout显式地设置内联显示样式?
好的,我找到了一些简单的方法来解决这个问题。最简单的方法可能是使用样式绑定:
<button class="hidden" data-bind="click: CancelProject, style: { display: CanCancel ? 'inherit' : 'none' } ">Cancel Project</button>
hidden
CSS选择器将初始状态设置为隐藏,并且绑定的内联样式将在模型绑定时覆盖此。
第二种方法可能更灵活一些。我给<body>
标签添加了一个CSS类:
<body class="loading">
现在,我可以在页面加载时隐藏某些元素:
BODY.loading DIV.buttons { display: none; }
最后,当我绑定数据时,我可以删除类:
ko.applyBindings(model);
$(document.body).removeClass('loading');
这将允许我使用纯CSS来控制页面加载时各种元素的行为。
这个问题的快速解决方案如下:
<button class="hidden" data-bind="click: CancelProject, style: { display: CanCancel ? 'inherit' : ''}">Cancel Project</button>
查看更多关于样式绑定的信息。
总而言之,它是快速和肮脏的,如果你正在处理一个更大的项目/框架,你可能想要用Matt的答案。
我通常包装的一切,将在一个div集与display:none
击倒绑定,然后要么使它可见(例如)jQuery之后的ko.applyBindings
,或者使用自定义击倒绑定,使其可见链接到loaded
, ready
或类似的属性(有用的,如果你的VM涉及通过AJAX加载数据),甚至只是一个with
绑定在我的视图模型。
下面是一个简单的自定义绑定,使用jQuery的.show()
来使元素可见,即使它最初被设置为display:none
:
ko.bindingHandlers["realVisible"] = {
init: function(element, valueAccessor) {
var val = ko.utils.unwrapObservable(valueAccessor());
if (val) {
$(element).show();
}
else {
$(element).hide();
}
},
update: function(element, valueAccessor) {
var val = ko.utils.unwrapObservable(valueAccessor());
if (val) {
$(element).show();
}
else {
$(element).hide();
}
}
}
这是一个演示小提琴
- 将值动态绑定到jquery中的切换按钮
- Angularjs无法将单选按钮与嵌套范围内的模型绑定
- Aurelia绑定-点击按钮返回查看模型
- 如何防止 jQuery-UI 按钮集破坏 AngularJS 绑定
- 将 checkedValue 绑定与单选按钮一起使用
- 对触发其onclick功能的按钮进行键绑定
- 将按钮绑定到几个基于文本框中值的大小而激活的文本框
- 在Angular中绑定剑道网格按钮's ng click
- 使用XML将头文本、段落文本和按钮和每个图像绑定
- 将单选按钮值绑定到控制器(使用angularjs 1.5)
- 将事件绑定到Bootstrap 3(button.js)按钮无线电时出现问题
- 将javascript绑定到提交按钮时出现问题
- 如何在选择的按钮上动态/不断地绑定jQuery事件处理程序
- 动态绑定onclick事件为for循环中的所有按钮提供相同的值
- 选择绑定到同一范围的按钮,单击时会相互触发.如何从angular.js中的两个选择列表按钮解除范围绑定
- 数据绑定禁用属性在 foreach 内的按钮中不起作用
- 创建没有业务逻辑的干净挖空绑定(弹出框 - 单选按钮)
- 无法使用 jquery 绑定按钮上的单击事件
- 如何重新绑定按钮's使用.on/off单击事件
- 如何再次绑定按钮的click事件