Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Knockout.js可观察通知';始终';订阅_Knockout.js - Fatal编程技术网

Knockout.js可观察通知';始终';订阅

Knockout.js可观察通知';始终';订阅,knockout.js,Knockout.js,我有以下代码: HTML: JSFiddle: 我想知道为什么当新旧年龄相同时(当输入失去焦点时),ageChangeCount不会增加?因为值绑定处理程序只是在新值与旧值匹配时忽略模型更新。因此,订阅将无法正常运行 请参见一目了然,该代码似乎适用于模型更新且该值需要发送到DOM的情况,而不是相反?如果聚焦字段,然后在不编辑该值的情况下使其模糊,则不会触发更改事件。为什么要这样做?(在更新版本的knockout中,您可以使用textInput:age绑定而不是value:age,当您实际编辑值时

我有以下代码:

HTML:

JSFiddle:


我想知道为什么当新旧年龄相同时(当输入失去焦点时),ageChangeCount不会增加?

因为
绑定处理程序只是在新值与旧值匹配时忽略模型更新。因此,订阅将无法正常运行


请参见

一目了然,该代码似乎适用于模型更新且该值需要发送到DOM的情况,而不是相反?如果聚焦字段,然后在不编辑该值的情况下使其模糊,则不会触发
更改
事件。为什么要这样做?(在更新版本的knockout中,您可以使用
textInput:age
绑定而不是
value:age
,当您实际编辑值时,两者之间存在差异。)这个想法来源于。该链接包括一个小提琴-小提琴对您有用吗?因为它对我不起作用,这让我怀疑整个帖子…在页面底部还有一个小部分,叫做强迫观察者总是通知订阅者。也许我的英语不太好…看看下面@haim770发布的答案。通常,您可以强制可观察对象始终触发通知(例如,如果您手动编写
self.age(self.age())
,计数器将更新),但在特定情况下,“
值已更改,但新值与旧值完全相同”,敲除代码的另一部分会停止触发通知。
<p>Age:
    <input data-bind="value:age" />
</p>
<p>Age has been changed: <span data-bind="text:ageChangeCount"></span> times</p>
function viewModel() {

    var self = this;

    self.age = ko.observable(10).extend({
        notify: 'always'
    }), 

    self.ageChangeCount = ko.observable(0),

    self.age.subscribe(function (val) {
        console.log('Someone has changed age');
        self.ageChangeCount(self.ageChangeCount() + 1);
    });

};

ko.applyBindings(new viewModel());