Knockout - 如何在手动订阅时反映observableArray中所选项目的更改

时间:2015-01-17 08:20:34

标签: knockout.js

我有一个observableArray绑定到一个html选择:

<select name="cars-list" data-bind="options: cars, optionsText: 'name', optionsValue: 'id', value: selectedCar"></select>

我订阅了selectedCarin,每当用户从html选择中选择一辆汽车时,它会再次将该项添加到选择中:

self.selectedCar.subscribe(function (newValue) {

    self.cars().push({
        id: 124,
        name: "sample"
    });
});

我在推送到observableArray后立即发出警告,果然,每当我选择一个项目时,长度都会增加1。

但是,html选择控件并未反映此更改。它存在于observableArray中,但显示器没有显示出来。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您不是直接在可观察数组上调用push,而是在底层数组上,因此knocout不会收到有关更改的通知。

要解决此问题,您只需从()

中删除cars()即可
self.cars.push({
    id: 124,
    name: "sample"
});

演示JSFiddle