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