Javascript 当jquery关闭/打开用于删除处理程序时,敲除值绑定未更新

Javascript 当jquery关闭/打开用于删除处理程序时,敲除值绑定未更新,javascript,jquery,data-binding,knockout.js,Javascript,Jquery,Data Binding,Knockout.js,我遇到过这样一种情况,我使用敲除键绑定了一个下拉列表: <select id="RoleGroups" class="tableDropDown" data-bind="options: userGroups, optionsText: 'group_nm', o

我遇到过这样一种情况,我使用敲除键绑定了一个下拉列表:

<select id="RoleGroups" class="tableDropDown" data-bind="options: userGroups, 
                                                         optionsText: 'group_nm',
                                                         optionsValue: 'group_cd',
                                                         value: selectedRoleGroup">
</select>
当我更新下拉列表的observable数组时,我将当前selectedRoleGroup observable重置为默认值。在这种情况下,我希望防止roleGroupChanged处理程序触发,因此我执行以下操作:

$('.tableDropDown').off('change');

//do stuff...set the dropdown value

$('#RoleGroups').on('change', self.roleGroupChanged);

我遇到的问题是,当下拉列表更改时,selectedRoleGroup的可观察值现在没有更新。我可以使用jquery获取当前值,但这与使用knockout的目的背道而驰。如果我删除使用jquery的off和on方法的代码,一切都会按预期工作,但处理程序会触发,这不是我想要的结果。寻找我做错了什么的想法。

您可以点击数据绑定中的
change
事件,而不是直接使用jQuery事件。如果在更新可观察数组时使用简单的true/false observable进行跟踪,则可以对change事件的事件参数使用
preventDefault()
。请看

明白了,所以我想我会发布……显然,仅仅做一个.off('change')将删除的不仅仅是我的角色组更改处理程序。如果我执行.off('change',self.roleGroupChanged),或者如果我在运行.on('change.mystuff',self.roleGroupChanged)时给我的处理程序命名了名称空间,然后再执行.off('change.mystuff')或.off('.mystuff')一切正常。

我不完全相信绑定/解除绑定
更改
事件是解决问题的正确方法。如果我正确理解了您的需求,您只需要在可观察数组的内容发生变化时将默认值设置为
selectedRoleGroup
$('.tableDropDown').off('change');

//do stuff...set the dropdown value

$('#RoleGroups').on('change', self.roleGroupChanged);