gpt4 book ai didi

jquery - knockout View 模型已更改

转载 作者:行者123 更新时间:2023-12-03 10:29:35 25 4
gpt4 key购买 nike

我正在尝试使用 knockout 创建一个方案,该方案监视 View 模型的更改并通知所有订户已发生更改,这很好,并且通知已被解除,但是随后我更改 View ,并且 View 模型更改了通知,再次被触发,就像在放置 View 模型时仍在观察属性一样,是否有任何方法可以解决此问题。

            var options = {
callback: function () {
var type = "modelChanged";
var subscription = $.config.core._subscriptions[type];
if (subscription) {
$.config.core._subscriptions[type] = null;
}
self.savePersonalInformation();
},
event: "forceSave",
moduleId: "MemberInformationPersonalInfo"
};
$.config.core.subscribeView(options);

注意:订阅 View 是一个自定义扩展程序,基本上是订阅程序的包装。
    monitorPropertyValues: function (model) {
//subscribe to each property in the model to monitor changes to the value
// loop through all the properties in the model
for (var property in model) {
if (model.hasOwnProperty(property)) {
if (model[property].subscribe) { //subcribe to observable properties
// subscribe to changes
model[property].subscribe(function(value) {
if (value) {
$.config.core.notifySubscribers(true, "modelChanged");
}
});
}
}

}
}

初始化 View 时,将调用MonitorPropertyValues。

我试图实现的基本行为如下,页面上有一个选项卡列表,每个选项卡都有自己的 View 模型。当我单击选项卡时,我想检查 View 模型内是否有更改。如果有,我想发送一个通知到 View 模型以保存所有更改。

最佳答案

您可以通过自动触摸所有属性的computed来实现这种功能(这是通过使用ko.toJS(可在其 View 模型中移动)完成的)。这比扩展程序简单,并且不应该有任何处理问题。

var viewModel = {
data: {
first: ko.observable("Ted"),
last: ko.observable("Smith")
},
isChanged: ko.observable(false)
}

viewModel.allChanges = ko.computed(function() {
ko.toJS(viewModel.data); //just touches all observables, that's it.
});

viewModel.allChanges.subscribe(function() {
if (!viewModel.isChanged()) {
viewModel.isChanged(true);
}
});

ko.applyBindings(viewModel);​

该解决方案是由RP Niemeyer提出的,但是我现在找不到原始的解决方案。无论如何,功劳归功于他。

关于jquery - knockout View 模型已更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11670565/

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