ko.mapping.fromJS(settings, self.settings);
似乎没有第二次更新我的动态视图。我相信它是因为值是相同的,所以订阅永远不会被激发再次更新视图。视图包含默认值并以模态打开,因此您第二次看到默认值。我执行app.viewModel.members.eventSchedule.editSettings.settings.GameTime("204")
,如果该值与第一次调用中的原始值不同,则会更新。重新映射后,我可以对该self.settings
对象上的所有可观察对象执行订阅吗?我知道我可以做valueHasMutated或者指定一个空值然后是真值,但我不想为10个属性做这个。
这有效
self.dialog.isOpen(true);
ko.mapping.fromJS(settings, self.settings);
self.settings.GameTime.valueHasMutated();
的Javascript
function EditSettings() {
var self = this;
self.settings = null;
self.dialog = new Dialog();
self.open = function (open, url) {
if (open) {
var options = {
url: url,
type: 'GET',
success: function (settings) {
self.dialog.isOpen(true);
ko.mapping.fromJS(settings, self.settings);
}
};
app.call(options);
} else {
self.dialog.isOpen(false);
}
};
}
答案 0 :(得分:0)
我知道派对迟到了,但我在knockout.mapping上遇到了同样的问题,并使用了接受的(但由于某种原因,downvoted)解决方案。但是我发现在我的特定情况下,映射插件将 ko_mapping 对象添加到不是可观察的属性(因此没有.valueHasMutated来调用)。这可能是一个奇怪的情况(我正在努力清理一些可观察的调用)但它确实在代码中显示了一个可以避免的潜在异常:
这是我为避免导致异常的非可观察性而做的(使用上面的变量保持一致):
ko.mapping.fromJS(settings, self.settings);
//Indicate mutated value for all properties
for (var property in self.settings) {
if (typeof (self.settings[property].valueHasMutated) === "function") {
self.settings[property].valueHasMutated();
}
}
在映射的observable中存在非可观察属性的情况下,这应该是有用的。
答案 1 :(得分:-1)
这就像一个魅力。
self.dialog.isOpen(true);
ko.mapping.fromJS(settings, self.settings);
for (var property in self.settings) {
self.settings[property].valueHasMutated();
}