我有一个具有以下绑定的DropDownList:
<select data-bind="value: DropDownValue, event: { change: OnChange }">
<option value="1">Val 1</option>
/* and more */
</select>
当用户从DropDownList中选择一个不同的值时,将正确触发OnChange事件。
使用来更新observable属性的值时,也会触发该事件viewModel.DropDownValue(1)
。
我要实现的目标是仅在用户通过UI设置值时才触发change事件。
通过可观察值更新值时是否可以阻止更改事件?
这是JSFiddle示例:https ://jsfiddle.net/5ex5j7jL/3/
就像一个方法看起来做的是使用该isTrusted
财产的的event
对象(true
当被用户操作,生成的事件false
时,由脚本生成的):
self.OnChange = function(viewModel, event) {
if(event.isTrusted) {
console.log("from dropdown");
return;
} else {
console.log("NOT from dropdown");
// do something
}
};
查看更新的小提琴
编辑
当然,如果要防止用户通过UI更改下拉列表,则必须实现某种机制:
function ViewModel() {
var self = this;
self.DropDownValue = ko.observable();
self._original = null;
self.OnChange = function(viewModel, event) {
if(event.isTrusted) {
// rollback the viewModel value to the old one
viewModel.DropDownValue(self._original)
return false
} else {
// keep a reference to the latest value for later rollback
self._original = ko.unwrap(viewModel.DropDownValue)
}
};
};
看到这个更新的小提琴
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句