Knockout.js观察预先存在的API对象的成员

Knockout.js Observing members of a pre-existing API object

本文关键字:API 对象 成员 存在 js 观察 Knockout      更新时间:2023-09-26

我已经编写了一个大型数据API,用于web应用程序之外的多个位置,我想将淘汰集成到应用程序中。似乎通过敲除,你可以创建一个具有可观察性的模型。我无法想象的是一种观察API中预先存在的值的方法。这可能吗?或者我需要一个中间模型来来回推送数据吗?这似乎非常不方便和低效。我是不是错过了一些显而易见的东西?

在下面的代码中,我想观察一下name属性。我很乐意在这里提出最佳方法的建议?

编辑:首选的方法是将观察者附加到已经存在的属性上,而不是围绕敲除编写API或在API之上编写额外的包装器。这个API与一些非浏览器应用程序共享,我认为这消除了使用敲除编写整个API而不增加额外复杂性的可能性。我愿意考虑其他可以满足我需要的框架。

myAPI.user = {
    ...
    get name() {
        return myAPI.user.object.name;
    },
    set name(x) {
       myAPI.user.setProperty('name', x);
    }
    ...
};

您可以编写自定义computed

var VM = function() {
   this.apiUserName = ko.computed({
       read: function() { return myAPI.user.object.name; },
       write: function(value) { return myAPI.user.setProperty('name', value); },
       owner: this
   });
}

现在,如果myAPI.user.object.name发生更改并且您有一个事件,请调用valueHasMutated

// inside your event
vm.apiUserName.valueHasMutated();