当我尝试使用以下代码更改另一个可观察值时,我尝试更新一个可观察值。
<input type="text" id="t" name="t" data-bind="value:someValue" />
<br/>
<label data-bind="text: somethingElse"></label>
这是我的模特
var ViewModel = (function() {
var vm = {};
var somethingElse = ko.observable();
vm.someValue = ko.observable();
vm.someValue.subscribe(function(v) {
somethingElse(v);
});
return vm;
});
var vm = new ViewModel();
ko.applyBindings(vm);
我期望当我更改someValue的值时,我应该看到其他可观察到的东西Else正在更新。有人可以告诉我我在做什么错。
谢谢
答案 0 :(得分:0)
尝试一下:
var ViewModel = (function() {
this.someValue = ko.observable();
this.somethingElse = ko.pureComputed(function(){
return this.someValue();
}, this);
return this;
});
var vm = new ViewModel();
ko.applyBindings(vm);
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
<input type="text" id="t" name="t" data-bind="textInput:someValue" />
<br/>
<label data-bind="text: somethingElse"></label>
如果要在另一个可观察值发生更改时更新一个可观察值,则应使用敲除计算(或pureCompuded)可观察值(请参阅http://knockoutjs.com/documentation/computedObservables.html)。我对您的HTML代码进行了另一处更改-将数据绑定类型从“值”更改为“ textInput”。与值绑定不同,textInput为所有类型的用户输入(包括自动完成,拖放和剪贴板事件)提供了来自DOM的即时更新,因此您可以立即在somethingElse变量中查看结果。