Knockout.js-防止更改事件绑定通过可观察值设置值时触发

美眉

我有一个具有以下绑定的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/

cl3m

就像一个方法看起来做的是使用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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章