【发布时间】:2015-06-01 19:35:28
【问题描述】:
我还没有找到解决办法。
我正在尝试为 html 元素 div 标记上的单击事件创建自定义 bindingHandler。
// custom bindingHandler and observable
<div data-bind="OnClickEvent: HasBeenClicked"></div>
// to show observable's true/false value
<span data-bind="text: 'Observable: ' + HasBeenClicked()"></span>
这个 bindingHandler 做了它应该做的事情,如果你点击 div 文本将会改变。但是,observable 会说 if false。
ko.bindingHandlers.OnClickEvent = {
update: function (element, valueAccessor) {
$(element).text('Click Here: false');
var observable = ko.utils.unwrapObservable(valueAccessor());
$(element).on('click', function () {
observable = !observable;
if (observable) {
$(element).text('Click Here: true');
} else {
$(element).text('Click Here: false');
}
});
}
}
function ViewModel() {
var self = this;
self.HasBeenClicked = ko.observable(false);
}
ko.applyBindings(new ViewModel());
如何设置可观察的 HasBeenClicked 以在每次点击时在真/假之间切换,就像文本一样?
【问题讨论】:
-
你没有将新值写回你的 observable。所以你需要
valueAccessor()来做到这一点:observable = !observable; valueAccessor()(observable);。但是,您的自定义绑定非常奇怪且有问题。例如,对于每个可观察到的更改,它都会一次又一次地订阅点击事件......你想用这个绑定实现什么? -
我知道它很奇怪,它是为了看看我如何在点击时更改可观察的。最终,我将使用引导 glyphicons 使它看起来像一个花哨的复选框。但是,添加您建议的代码位不会更改可观察的。谢谢@nemesv
标签: knockout.js