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.