【发布时间】:2016-10-20 05:02:51
【问题描述】:
我正在用 Knockout 做一个实验,这里是 JSFiddle
单选按钮具有与视图模型的 enableMe 属性的数据绑定。如果我单击单选按钮,它会更新 enableMe 属性并触发“已检查”数据绑定。
我想要做的是,当我更改单选按钮的checked 属性(在按钮单击事件上)并查看视图模型是否更改时。它不会改变。
这是为什么呢?需要知道在这种情况下淘汰赛是如何工作的。
var ViewModel = function() {
this.enableMe = ko.observable(false);
};
var myVM = new ViewModel();
ko.applyBindings(myVM);
function clickme() {
//Changing the checked state does not change VM
document.getElementById("myradio1").checked = true;
//Changing the VM works
//myVM.enableMe(true);
alert("Alert Message OnClick");
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
EnableMe: <input id="myradio1" type="radio" data-bind='checked: enableMe'/><br/>
Enable status: <span data-bind='text: enableMe'></span>
<br/>
<button id="button1" onclick="clickme();">Click To Disable</button>
【问题讨论】:
-
使用 KO 时不应手动操作 DOM。您应该使用
myVM.enableMe(true);更新您的虚拟机