淘汰:找出哪个可观察的触发计算

时间:2014-07-15 08:14:08

标签: javascript knockout.js

我有一个具有多个可观察对象的对象。在计算机中有一种方法可以知道哪些可观察的变化,因此哪个observable触发了计算的?

提前谢谢你 马修

1 个答案:

答案 0 :(得分:1)

如果没有详细说明您想要实现的目标,我会发布此信息,希望它可能有所帮助。

跟踪更改的一种简单方法是在要跟踪的可观察对象上使用.subscribe方法。每次observable更新时,此方法都会触发。

self.myValue = ko.observable('initial value');

self.myValue.subscribe(function (item) {
    alert('myValue has changed to: ' + item);
});

传入订阅功能的item是可选的,因此您可以根据需要使用新值。

这是一个与计算机一起使用的简单示例:

Sample JSFiddle

<强> JS:

var viewModel = function () {
    var self = this;
    self.firstName = ko.observable('Mod');
    self.lastName = ko.observable('dinu');

    self.valueChanged = ko.observable('');

    self.fullName = ko.computed(function () {
        var val = '';
        if (self.valueChanged() !== '') {
            val = ' (' + self.valueChanged() + ' Changed)';
        }

        return self.firstName() + ' ' + self.lastName() + val;
    });

    self.firstName.subscribe(function () {
        self.valueChanged('First Name');
    });

    self.lastName.subscribe(function () {
        self.valueChanged('Last Name');
    });
};

ko.applyBindings(new viewModel());

<强> HTML:

<div>
    <label for="fname">First Name:</label>
    <input id="fname" data-bind="value: firstName" />
</div>
<div>
    <label for="lname">Last Name:</label>
    <input id="lname" data-bind="value: lastName" />
</div>
<hr />
<div>Hello <span data-bind="text: fullName"></span></div>
<hr />
<div>Value Changed: <span data-bind="text: valueChanged"></span></div>