Knockout.js:选择元素中的清除选择

时间:2012-07-02 19:53:15

标签: javascript knockout.js knockout-2.0 ko.observablearray

我需要从<select>元素中清除选择。 我已经阅读了Knockoutjs clear selected value in combobox这样的帖子,并尝试了接受的答案,但这些解决方案似乎无法正常工作 (不知道是否因为答案被接受了,Knockout 2中的某些内容发生了变化?)。

以下是一个示例视图模型:

var ClearSelectionViewModel = function () {
    var self = this;

    self.station = ko.observable();

    self.selectedStation = ko.observable();
    self.selectedStation.subscribe(function (value) {
        self.station(value);
    });

    self.stations = ko.observableArray(['CLT', 'PHL', 'PHX', 'PIT']);

    self.clearSelectedStation = function () {
        self.selectedStation(null);
    };
};

ko.applyBindings(new ClearSelectionViewModel());​

当调用clearSelectedStation时,绑定视图模型属性应设置为null,这应该通过绑定的<select>元素反映在UI中,并显示空白并展开列表选项显示没有突出显示的项目。但是,我注意到的是,如果您尝试将绑定值属性(selectedStation)设置为不在选项数组(stations)中的任何内容,则绑定似乎会被忽略。

这个小提琴说明了我在说什么:http://jsfiddle.net/sellmeadog/Su8Zq/1/

如果我不需要,我不想用“空白”值“污染”选项数组。我想知道如何让链接的帖子中的解决方案起作用。

2 个答案:

答案 0 :(得分:8)

一种选择是对“未选择”值使用optionsCaption附加绑定。它必须设置为可以使用它,但您可以将其设置为" "

<select data-bind="optionsCaption: ' ', options: stations, value: selectedStation"></select>

示例:http://jsfiddle.net/rniemeyer/Su8Zq/3/

答案 1 :(得分:2)

只需添加'optionsCaption',如下所示:

<select data-bind="options: stations, value: selectedStation, optionsCaption: '-- SELECT --'"></select>

更新了小提琴:http://jsfiddle.net/Su8Zq/2/