我遇到了這種情況,當下拉從可計算的KO屬性更改時,下拉的綁定值observable不會自動同步。 這是一個有點棘手,因爲下拉列表是從另一個下拉列表中選擇一個值填充,而是爲了使這更清楚我創造了這個測試搗鼓這表明了問題:https://jsfiddle.net/n3wjack/gzmb792p/KO綁定值與下拉不同步
這裏是如何模擬問題:
- 在寵物下拉列表中,選擇John的第二隻寵物「Mozart」。你會看到'selected寵物'標籤更新。
- 現在在第一個下拉列表中選擇簡。第二個下拉列表將更新,顯示Jane的寵物。
選定的寵物標籤是未更新顯示簡的第一個寵物的名稱。 如果您對寵物下拉列表進行更改,則該值會再次更新。 我不能保證用戶會這樣做,所以我不確定這個值是否正確。
那麼我該如何解決這個問題,或者我做錯了什麼?
-
我還包括下面的代碼,顯然這是必需的。
JS:
var petOwners = [
{ name: "John", pets: ["Blacky","Mozart"] },
{ name: "Jane", pets: ["Polly", "Felix"]}
];
var viewModel = {
availableOwners: ko.observableArray(petOwners),
selectedOwner: ko.observable(),
selectedPet: ko.observable()
}
viewModel.availablePets = ko.computed(function(){
console.log("** availablePets computed **")
var result = [];
if (viewModel.selectedOwner())
{
console.log(viewModel.selectedOwner());
result = viewModel.selectedOwner().pets;
}
console.log(result);
return result;
}, this);
viewModel.peekPet = function(){
document.getElementById("peekoutput").innerHTML += "selectedPet = " + viewModel.selectedPet.peek() + "</br>";
}
ko.applyBindings(viewModel);
HTML:
<select data-bind="foreach:availableOwners, value:selectedOwner">
<option data-bind="text: name, value: $data"></option>
</select>
<i>
(selected: <span data-bind="text: selectedOwner().name"></span>)
</i>
<p>
This dropdown shows the pets of the owner, selected in the above dropdown.
</p>
<select data-bind="foreach:availablePets, value: selectedPet">
<option data-bind="text: $data, value: $data"></option>
</select>
<p>
<i>
Selected pet: <span data-bind="text: selectedPet"></span>
</i>
</p>
<p>
The selected pet however doesn't update to be in sync with the first pet in the dropdown, when you change the owner dropdown. :(
</p>
<p>
<button data-bind="click: peekPet">Peek selected pet</button>
</p>
<code id="peekoutput">
</code>
你應該使用'options'結合,而不是'的foreach '。 –