将在何时调用扩展程序函数

When will be the extender function will get called

本文关键字:程序 函数 扩展 调用 何时      更新时间:2023-09-26

我是淘汰js的新手。我想实现一个可观察的动态验证。为此,我想使用扩展器函数。但这并不是在呼唤。我已经创建了jsfiddle。我怀疑它什么时候会被调用。

代码是

// Here's my data model
var ViewModel = function(first, last) {
this.firstName = ko.observable(first).extend({logChange: "Sri" });
this.lastName = ko.observable(last);
this.fullName = ko.computed(function() {
    // Knockout tracks dependencies automatically. It knows that fullName depends on firstName and lastName, because these get called when evaluating fullName.
    return this.firstName() + " " + this.lastName();
}, this);
ko.extenders.logChange = function(target, option) {
    alert("log change function")
    target.subscribe(function(newValue) {
        alert("subscribe function:  "+option + ": " + newValue);
    });
return target;
};
};
ko.applyBindings(new ViewModel("Hello", "World")); // This makes Knockout get to work

谨致问候,Srinivas

尽管文档中没有明确说明,但

任何自定义扩展程序定义都必须在第一次使用之前提供。

因此,将ko.extenders.logChange部分移到ViewModel函数之外:

ko.extenders.logChange = function(target, option) {
        alert("log change function")
    target.subscribe(function(newValue) {
        alert("subscribe function:  "+option + ": " + newValue);
    });
    return target;
};
var ViewModel = function(first, last) {
    this.firstName = ko.observable(first).extend({logChange: "Sri" });
    this.lastName = ko.observable(last);
    this.fullName = ko.computed(function() {
        // Knockout tracks dependencies automatically. It knows that fullName
        // depends on firstName and lastName, because these get called when
        // evaluating fullName.
        return this.firstName() + " " + this.lastName();
    }, this);
};

演示JSFiddle。