我有一个smiple选择控件绑定到包含2个值的模型:id - 我想绑定到选定索引的值,而cities =数组我想要填充的ooptions。 这是JS:
var VM=function ViewModel() {
self=this;
this.id = ko.observable(102);
this.cities=ko.observableArray([]);
this.getCities=function(){
self.cities( [{"Key":"-1","Value":"choose city"},{"Key":"100","Value":"leningrad"}, {"Key":"102","Value":"moscow"}]);
} ;
}
var vm=new VM();
ko.applyBindings(vm);
我希望用户点击按钮后可以播放城市,但所选城市必须留在莫斯科(因为最初“id”为102)
这是我的HTML:
<!DOCTYPE html>
<html>
<head>
<script src="http://cloud.github.com/downloads/SteveSanderson/knockout/knockout-2.1.0.js"></script>
<meta charset=utf-8 />
<title>JS Bin</title>
</head>
<body>
<select data-bind="options:cities,optionsText:'Value',optionsValue:'Key',value:id"></select>
<button data-bind="click:getCities">get cities</button>
</body>
</html>
我的问题是城市加载后所选索引丢失了 请帮忙 感谢
答案 0 :(得分:0)
我想出了我的问题所在: 'value'绑定是双向的,所以当首先绑定选择没有选项时 - 'id'变为-1。 当我改为:
<select data-bind="options:cities,optionsText:'Value',optionsValue:'Key'"></select>
并补充说:
this.getCities=function(){
self.cities( [{"Key":"-1","Value":"choose city"},{"Key":"100","Value":"leningrad"}, {"Key":"102","Value":"moscow"}]
);
$('select').val(self.id());
} ;
事情开始奏效了, 但现在问题是如果用户在选择填充后选择某个城市时如何收集价值: 我的解决方案是将选择更改附加到不显眼的jquery处理程序:
var VM=function ViewModel() {
self=this;
this.id = ko.observable(102);
this.cities=ko.observableArray([]);
this.getCities=function(){
self.cities( [{"Key":"-1","Value":"choose city"},{"Key":"100","Value":"leningrad"}, {"Key":"102","Value":"moscow"}]
);
$('select').val(self.id());
} ;
};
var f=function(){
vm.id($('select').val())
}
var vm=new VM();
ko.applyBindings(vm);
$('select').change(f)
我希望它会帮助那些遇到我问题的人......