Knockout - 如何在手动订阅时反映 observableArray 中所选项目的变化
Knockout - How to reflect changes of selected item in an observableArray when manually subscribing
我有一个绑定到 html select:
的 observableArray
<select name="cars-list" data-bind="options: cars, optionsText: 'name', optionsValue: 'id', value: selectedCar"></select>
我订阅了 selectedCarin,每当用户 select 从 html select 购买汽车时,它会再次将该项目添加到 [=23] =]:
self.selectedCar.subscribe(function (newValue) {
self.cars().push({
id: 124,
name: "sample"
});
});
我在推送到 observableArray 后立即发出警报,果然,每当我 select 一个项目时,长度就会增加 1。
但是,html select 控件并未反映此更改。它存在于 observableArray 中,但显示器没有显示它。有什么想法吗?
您不是直接在可观察数组上调用 push
,而是在底层数组上调用,因此 knocout 不会收到有关更改的通知。
要修复它,您只需从 cars()
中删除 ()
:
self.cars.push({
id: 124,
name: "sample"
});
演示 JSFiddle.
我有一个绑定到 html select:
的 observableArray<select name="cars-list" data-bind="options: cars, optionsText: 'name', optionsValue: 'id', value: selectedCar"></select>
我订阅了 selectedCarin,每当用户 select 从 html select 购买汽车时,它会再次将该项目添加到 [=23] =]:
self.selectedCar.subscribe(function (newValue) {
self.cars().push({
id: 124,
name: "sample"
});
});
我在推送到 observableArray 后立即发出警报,果然,每当我 select 一个项目时,长度就会增加 1。
但是,html select 控件并未反映此更改。它存在于 observableArray 中,但显示器没有显示它。有什么想法吗?
您不是直接在可观察数组上调用 push
,而是在底层数组上调用,因此 knocout 不会收到有关更改的通知。
要修复它,您只需从 cars()
中删除 ()
:
self.cars.push({
id: 124,
name: "sample"
});
演示 JSFiddle.