knockoutjs在html上使用逻辑或启用绑定
knockoutjs use logical or with enable binding on html
使用knockoutjs,我正在尝试做一些我认为相当简单且受支持的事情,但我无法让它发挥作用。
我有三个复选框,分别称为A、B和C。我还有一个选择/选项下拉列表,我想基于这些复选框启用它们,称为字段1、2和3。
问题是,启用-禁用映射如下所示:方框A启用=字段1启用,方框B启用=字段1和2启用,方框C已启用=字段3已启用。
我的HTML代码如下:
<div id="checkboxesContainer">
<div>
<!-- Label elements removed for smaller code -->
<input id="main-checkbox-1" type="checkbox" data-bind="checked: box1" />
<input id="main-checkbox-2" type="checkbox" data-bind="checked: box2" />
<input id="main-checkbox-3" type="checkbox" data-bind="checked: box3" />
</div>
<div id="selectsContainer">
<!-- Label elements removed for smaller code -->
<div>
<select id="main-select-1" data-bind="options: workouts, optionsText: 'WorkoutName', value: selectedWorkout, enable: box1 || box2"></select>
</div>
<div>
<select id="main-select-2" data-bind="enable: box2"></select>
</div>
<div>
<select id="main-select-3" data-bind="enable: box3"></select>
</div>
</div>
下面是我的knockout.js视图模型代码,用于启用选择-我也缩短了它,因为与knockoutjs相关的一切都在工作:
self.box1 = ko.observable(false);
self.box2 = ko.observable(false);
self.box3 = ko.observable(false);
为什么我的enable:box1||box2在选中其中任何一个时都不启用选择?如果可能的话,我希望避免订阅复选框Observable的更改,也避免自己翻转布尔值。
只要有多个条件,就使用括号(例如box1()||box2())。使绑定像这样:-
<select id="main-select-1" data-bind="options: workouts, optionsText: 'WorkoutName', value: selectedWorkout, enable: box1() || box2()"></select>
Fiddle演示
+1,但我会更进一步,将计算移动到viewModel上的computed中,以清理HTML并将该信息保留在视图模型中
小提琴手演示
<select id="main-select-1" data-bind="options: workouts, optionsText: 'WorkoutName', value: selectedWorkout, enable: enableSelect1"></select>
var vm = function () {
var self = this;
self.box1 = ko.observable(false);
self.box2 = ko.observable(false);
self.box3 = ko.observable(false);
self.selectedWorkout = ko.observable();
self.workouts = ko.observableArray([{
WorkoutName: 'Workout 1'
}, {
WorkoutName: 'Workout 2'
}, {
WorkoutName: 'Workout 3'
}, {
WorkoutName: 'Workout 4'
}, ]);
self.enableSelect1 = ko.computed({
read: function () {
return self.box1() || self.box2();
},
deferEvaluation: true
});
return self;
}
尝试将box1 || box2
放在括号内,如下所示:enable: (box1 || box2)
。
相关文章:
- 在VanillaJS中模拟模型双向数据绑定
- 无法通过数组映射绑定
- 主干-不管怎样,检查事件以前是否绑定过
- 用于搜索的聚合物嵌套绑定
- Angular:更新一次性绑定的数据
- 如何使用ngrepeat和双向绑定获得指令的隔离范围
- react.js中的密钥绑定
- 使用regex的jquery keydown绑定不会验证撇号和句点
- 将事件处理程序绑定到任何可能的事件
- AngularJS指令只识别双向绑定类型
- 淘汰赛.JS'启用'长度绑定条件不起作用
- 启用具有多个布尔可观察标志的绑定
- 当通过Ajax成功回调更新可观察数组时,启用绑定中断
- “没有VBO绑定到启用的顶点属性索引0”试图在WebGL中绘制一个简单的纹理
- 挖空 JS 值更新按键无法启用绑定
- 绑定骨干表单视图ui到模型更改以启用和禁用"保存"按钮
- 为selenium webdriver ruby绑定脚本使用javascript执行器启用禁用字段
- knockoutjs在html上使用逻辑或启用绑定
- 如何使用启用属性绑定数据
- qTip2和Knockout.js启用了绑定