【问题标题】:Updating observable in Subscribe in Knockout JS在 Knockout JS 中更新订阅中的 observable
【发布时间】:2019-01-04 17:30:04
【问题描述】:

当另一个可观察对象发生更改时,我正在尝试使用以下代码更新一个可观察对象的值。

<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 的值时,我应该会看到其他可观察的 somethingElse 得到更新。有人可以告诉我我在这里做错了什么。

Fiddle Link

谢谢

【问题讨论】:

  • 没关系..在前面缺少自我。所以它应该是 self.somethingElse(v) 以防像我这样的初学者来寻找答案。

标签: knockout.js knockout-3.0


【解决方案1】:

试试这个:

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>

如果你想在另一个 observable 发生变化时更新一个 observable 的值,你应该使用敲除计算(或 pureCompuded)observables(查看更多:http://knockoutjs.com/documentation/computedObservables.html)。我对您的 HTML 代码进行了另一项更改 - 我将数据绑定类型从“值”更改为“文本输入”。与值绑定不同,textInput 为所有类型的用户输入提供来自 DOM 的即时更新,包括自动完成、拖放和剪贴板事件,因此您可以立即在 somethingElse 变量中看到结果。

【讨论】:

    猜你喜欢
    • 2015-05-19
    • 2013-04-17
    • 2013-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-27
    • 1970-01-01
    相关资源
    最近更新 更多