使用淘汰赛绑定更改选择事件,我怎么知道它是否是真正的更改? [英] Change event on select with knockout binding, how can I know if it is a real change?

查看:22
本文介绍了使用淘汰赛绑定更改选择事件,我怎么知道它是否是真正的更改?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在构建一个权限 UI,我有一个权限列表,每个权限旁边都有一个选择列表.权限由绑定到选择列表的可观察对象数组表示:

<div class="permission_row"><span data-bind="text: name"></span><select data-bind="value: level, event:{ change: $parent.permissionChanged}"><option value="0"></option><option value="1">R</option><option value="2">RW</option></选择>

现在的问题是:当 UI 第一次填充时,change 事件会被引发.我调用我的 ajax 函数,获取权限列表,然后为每个权限项引发事件.这真的不是我想要的行为.我希望仅当用户真正为选择列表中的权限选择新值时才提升它,我该怎么做?

解决方案

其实你想知道事件是由用户触发还是程序触发,很明显,事件会在初始化时触发.

添加subscription的淘汰方式不会在所有情况下都有帮助,为什么因为在大多数模型中会这样实现

  1. 用未定义的数据初始化模型,只是结构化(实际KO初始化)
  2. 用初始数据更新模型(逻辑初始化,如加载 JSON、获取数据等)
  3. 用户互动和更新

我们要捕获的实际步骤是 3 中的更改,但在第二步 subscription 将得到 call ,所以更好的方法是添加像

这样的事件更改

 
                
            
发送“验证码”获取 | 15天全站免登陆