2013-10-28 91 views
0

我在嘗試更新用戶地址時遇到了一個非常奇怪的錯誤。我有兩個領域,這兩個觀測這個簡化的地址對象:無法寫出可觀察的結果

stateProvince.name = ko.observable(""); 
stateProvince.code = ko.observable(""); 

現在,當我嘗試更新這兩個後來,這是有效的執行程序中開發工具:

stateProvince.name("New York"); 
stateProvince.code("NY"); 

但第二行實際上並沒有改變狀態碼的值。沒有發生任何異常,嘗試在開發工具中更改它不起作用,最奇怪的部分是更改代碼時更改失敗的所有代碼都可以正常工作。什麼樣的條件可能導致淘汰賽無法更新而沒有錯誤?我試圖擴展現有的代碼庫,但我的搜索沒有透露任何可以區分這兩個對象的東西。

+3

你最好的選擇是嘗試在jsFiddle中重現它。從這段代碼看起來很好。如果我不得不猜測,我會說你的'code'綁定到'select'。如果你在select元素上使用'value'綁定(通常是'options'),那麼Knockout會試圖強制你的observable的值對應一個選項。也許「NY」與選項不匹配。 –

+0

它是一個選擇! NY是一個選項,但它可能還沒有存在,因爲正在生成的選項的可觀察數組尚未創建。謝謝,我將添加一個回調,當選擇選項填充。 – jokulmorder

回答

1

從評論搬家回答:

如果code綁定到select和你正在使用的value結合(通常options),然後淘汰賽試圖強制執行,你觀察到的值對應的選項。確保您的初始值對應於一個選項。

如果你的選擇也越來越晚填充,那麼你要麼需要重新填充選擇的值,或喜歡的東西,你可以預填充它的初始負載:

this.code = ko.observable(data.code); 

//pre-populate with the one matching value 
this.codeOptions = ko.observableArray([data.code]);