gpt4 book ai didi

javascript - 如何将扩展器添加到 Knockout 中的现有可观察对象

转载 作者:行者123 更新时间:2023-11-30 17:28:57 24 4
gpt4 key购买 nike

我看过这个: http://knockoutjs.com/documentation/extenders.html

问题是我正在使用 fromJs 创建我的 View 模型,所以我的可观察对象已经存在。我认为我可以执行以下操作来添加扩展程序:

var data = result.Data;
if (!window.vmRealTimeActivity) {
window.vmRealTimeActivity = ko.mapping.fromJS(data, mappingKeys);
ko.applyBindings(vmRealTimeActivity, $('#second-btm')[0]);
} else {
ko.mapping.fromJS(data, vmRealTimeActivity);
}

vmRealTimeActivity.MyExistingObservable.extend({ numeric: null });
vmRealTimeActivity.MyExistingObservable(9999); // doesn't call numeric extender

我的扩展器在第一次附加扩展器时被调用,但在尝试更改值后不会被调用。

我阅读了另一篇 SO 帖子,其中指出 .extend() 创建了一个新的可观察对象,因此您必须这样做,但这也不起作用:

vmRealTimeActivity.MyExistingObservable = vmRealTimeActivity.MyExistingObservable.extend({ numeric: null });

除了不再调用我的格式化程序之外,该值开始返回 NaN。

如何以正确的方式将扩展器附加到现有的可观察对象?

最佳答案

由于您使用的是映射插件,因此您可以指定一个create 回调。如果您将以下内容添加到现有的 mappingKeys,它可能会起作用(我不知道您的确切映射,因此您可能需要在这里和那里更改位):

'MyExistingObservable': {
create: function(options) {
return new ko.observable(options.data).extend({ numeric: null });
}
}

这会导致在从您的数据映射时扩展可观察性。

Here's a jsFiddle使用一个工作示例 (vm1) 和您当前的非工作示例 (vm2) 进行比较

关于javascript - 如何将扩展器添加到 Knockout 中的现有可观察对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23600157/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com