我正在尝试在表格中显示我的数据,而不是复选框显示一些花哨的东西,例如 http://www.bootstrap-switch.org/
我已经设法使用此绑定构建表并处理插件
ko.bindingHandlers.bootstrapSwitchOn = {
init: function (element, valueAccessor, allBindingsAccessor, viewModel) {
$elem = $(element);
$(element).bootstrapSwitch();
$(element).bootstrapSwitch('state', ko.utils.unwrapObservable(valueAccessor())); // Set intial state
$elem.on('switchChange.bootstrapSwitch', function (e, data) {
valueAccessor()(data);
//$(this).trigger('click'); --***--
}); // Update the model when changed.
},
update: function (element, valueAccessor, allBindingsAccessor, viewModel) {
var vStatus = $(element).bootstrapSwitch('state');
var vmStatus = ko.utils.unwrapObservable(valueAccessor());
if (vStatus != vmStatus) {
$(element).bootstrapSwitch('state', vmStatus);
}
}
};
我已经展示了数据,但我被困在下一阶段。每次用户单击开关时,我都想调用一个方法来更改数据库中数据的状态。这是我尝试过的
<input type="checkbox" data-on-color="success" data-on-text="on" data-off-text="off" data-off-color="danger" name="switch-checkbox"
data-bind="bootstrapSwitchOn: active, click: $root.updateData"></td>
但是永远不会调用该方法。据我了解,这是因为 bootstrap-switch.js 实际上并没有触发它。所以我试着自己做,见—— * ——在自定义绑定中。这导致触发事件 2 次。这是不可接受的。
有没有办法在淘汰赛中调用此方法但不更改 VM?我知道我可以使用 dummyObservable 并在我的绑定中更新它,但是如果我必须更改每个我想使用引导开关的 VM,自定义绑定的意义何在?
基本上我正在尝试制作可重复使用的东西,并陷入淘汰赛部分。