2014-02-11 39 views
0

我有一個情況,其中i有使用基因敲除結合的下拉列表:敲除的值綁定不更新時的jquery /關閉用於去除處理程序

<select id="RoleGroups" class="tableDropDown" data-bind="options: userGroups, 
                 optionsText: 'group_nm', 
                 optionsValue: 'group_cd', 
                 value: selectedRoleGroup"> 
</select> 

我有一個改變處理程序的下拉設置:

self.roleGroupChanged = function() { 
     //do stuff      
    return true; 
}; 

當我更新下拉列表中的observable數組時,我將當前selectedRoleGroup observable重置爲默認值。我想,以防止roleGroupChanged處理程序在這種情況下開火,所以我下面的:

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

//do stuff...set the dropdown value 

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

我遇到的問題是可觀察到的值selectedRoleGroup現在沒有被下拉的變化時進行更新。我可以使用jquery獲取當前值,但是這會破壞使用knockout的目的。如果我刪除使用jquery的代碼和方法,一切都按預期工作,但處理程序觸發結果,這不是我想要的。尋找想法我做錯了什麼。

+0

我並不完全相信綁定/解除綁定「更改」事件是解決您的問題的正確方法。如果我正確理解了您的需求,只需要將默認值設置爲'selectedRoleGroup',如果observable數組的內容更改? –

回答

1

而不是直接使用jQuery事件,您可以在數據綁定中點擊change事件。如果在更新可觀察數組時使用簡單的真/假觀察值進行跟蹤,則可以在事件參數上使用preventDefault()作爲更改事件。看到updated fiddle

0

想通了,所以想我會發布....顯然只是做一個.off('更改')刪除不僅僅是我的roleGroupChanged處理程序。如果我做了一個.off('change',self.roleGroupChanged),或者當我運行.on('change.mystuff',self.roleGroupChanged)時命名了我的處理程序,然後用.off('change。 mystuff')或.off('。mystuff')一切都按預期工作。