在 Knockout 文档中,据说如果我们不使用 ko.observable(...),单向数据绑定是可能的:http: //knockoutjs.com/documentation/value-binding.html
但是,以下代码无法按我的预期工作:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<form data-bind="with: selectedMerchant">
<input data-bind="value: name"></input>
<button data-bind="click: change"> CHANGE </button>
<button data-bind="click: show"> SHOW </button>
</form>
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-debug.js" type="text/javascript"></script>
<script>
function PartnersViewModel() {
self.selectedMerchant = {'name': 'John'};
self.show = function() {
alert(JSON.stringify(self.selectedMerchant));
}
self.change = function() {
self.selectedMerchant = {'name': 'David'};
}
}
ko.applyBindings(new PartnersViewModel());
</script>
</body>
</html>
'selectedMerchant' 是在没有 ko.observable(...) 的情况下声明的,所以它应该是单向绑定的。我希望一旦单击“更改”按钮,输入框中的文本将更改为“大卫”。我还尝试了不同的方向 - 我更改了输入中的文本并单击了“显示”按钮。消息框给出了它在开始时的初始值。