我有2个选择列表,我想同步索引,因此当第一个索引为1时,第二个索引将为1等。knockout.js更新选择列表不会触发第一次更改
这是我的html。
<script src="http://cdnjs.cloudflare.com/ajax/libs/knockout/2.2.0/knockout-min.js"></script>
<div>
<select id="selLight" data-bind="options: $root.ddlLight, value: ddlLightSelected"></select>
<select id="selAction" data-bind="options: $root.ddlAction, value: ddlActionSelected"></select>
</div>
和JavaScript ...
var ViewModel = function() {
var self = this;
self.ddlLight = ko.observableArray(["RED", "AMBER", "GREEN"]);
self.ddlAction = ko.observableArray(["STOP", "READY", "GO"]);
self.ddlLightSelected = ko.observable();
self.ddlActionSelected = ko.observable();
self.ddlLightSelected.subscribe(function (event) {
document.getElementById("selAction").selectedIndex =
self.ddlLight.indexOf(self.ddlLightSelected());
});
self.ddlActionSelected.subscribe(function (event) {
document.getElementById("selLight").selectedIndex =
self.ddlAction.indexOf(self.ddlActionSelected());
});
};
ko.applyBindings(new ViewModel());
我有确切的问题小提琴...
http://jsfiddle.net/phykell/2vUTw/
编辑:我是有一个的jsfiddle几个问题,所以这里是一个jsbin ... http://jsbin.com/ilomer/4/
...这是如何重现问题:从灯光
- 运行的jsfiddle
- 选择GREEN(行动将改走)3.选择停止从操作(灯应更改为红色,但他们不这样做)
无法尝试您的代码,但几次观察1.您的DDL *选定的observables用空值初始化。你可能想用一些基本值来启动它们。所以当第一个.subscribe mtheod执行时,你不会在indexOf操作中得到一个null或-1。 2.你为什么要做document.getElement ..而不更新你自己选择的observable本身? – ryadavilli
这是我的理解,这是获得选定索引的方式?例如,如果我更新“self.ddlLightSelected”,则该值不会在选择框中更改。 – christoefar
jsfiddle目前无法正常工作,但您的示例在此处可用http://tinkerbin.com/eQo0XM1P - 只需选择运行 –