Knockoutjs清除组合框中的选定值

时间:2011-11-15 13:41:46

标签: javascript mvvm knockout.js

我有这个简单的knockout.js应用程序:

查看:

<select data-bind="options: allDocumentTypes , optionsCaption: 'Choose ...', optionsValue: 'id', optionsText: 'name', selectedOptions: selectedDocument"></select>
<span data-bind="click: cl">CLEAR VALUE!</span>

和这个简单的ViewModel:

function documentType(id, name){
    this.id = id;
    this.name = name;
}

var viewModel = {
    allDocumentTypes: ko.observableArray([]),
    selectedDocument: ko.observable(''),
    cl: function(){
       viewModel.selectedDocument('');
    }
};

/* load data */
viewModel.allDocumentTypes.push(new documentType(1,'Test 1'));
viewModel.allDocumentTypes.push(new documentType(2,'Test 2'));
ko.applyBindings(viewModel);

我希望,在我点击span“CLEAR VALUE!”之后,在select中将选择选项“选择...”,但它没有发生。 viewModel中的值设置为“”(空字符串),这是正确的,但用户仍然在select中看到旧值。

有没有办法做到这一点?

感谢您的帮助:)

3 个答案:

答案 0 :(得分:10)

您必须将绑定类型更改为“value”而不是“selectedOptions”。下一步是在cl函数中设置viewModel.selectedDocument:

viewModel.selectedDocument(null);

答案 1 :(得分:2)

在某些情况下,将observable值设置为null将不起作用。例如:

// This is the array
self.timePeriods = ko.observableArray([
    new timePeriod("weekly", 7),
    new timePeriod("fortnightly", 14),
    new timePeriod("monthly", 30),
    new timePeriod("half yearly", 180),
    new timePeriod("yearly", 365)
]);

这是html:

<select data-bind="options: timePeriods, 
                                   optionsText: function(item) { 
                                        return item.Name;
                                   }, 
                                   value: selectedPeriod"
                    class="combo">

您无法通过以下方式重置选择框:

  self.selectedPeriod(null); // this will not work

不能写下这个:

self.selectedPeriod(self.timePeriods()[0]);

答案 2 :(得分:0)

<script>
var vm ={ 
CountryId=ko.observable(),
QC=ko.observable(),
clearSelectedStation: function () {
this.CountryId(null);   //DropDown
this.QC('');   //Textbox
}
};
</script>

这是一个html

 <input type="text" tabindex="10" data-bind="value:QC"/>

<select class="dropdownlist" data-bind="options:Countries, value: CountryId, 
optionsCaption: '--Select--', optionsText: 'CountryName', optionsValue: 'CountryId'">