我有来自服务器的 JSON 数据:
{"HaveNotification":false,"IsError":false,"Title":null,"Description":null}
我正在尝试通过 ko.mapping 填充此 View 模型:
var notifyVM = {
HaveNotification: ko.observable(true),
IsError: ko.observable(false),
Title: ko.observable('Title goes here'),
Description: ko.observable('Description goes here'),
}
使用此代码,按轮询间隔调用:
function pollNotifications() {
$.getJSON('@Url.Action("GetNotifications", "Home")', function (data) {
ko.mapping.fromJSON(data, notifyVM);
setTimeout(pollNotifications, 10000);
});
}
这是页面加载代码:
$(function () {
ko.applyBindings(notifyVM);
setTimeout(pollNotifications, 10000);
});
但它不起作用。如果我在 fromJSON 调用后检查 View 模型,则可观察值不会更新,它们仍处于初始值。
更新: 更多信息...如果我在 pollNotifications 函数中执行此操作
var newVM = ko.mapping.fromJSON(data);
我注意到它创建的 View 模型与我的不同,它由单个可观察函数组成,而我的是一个具有一组可观察属性的对象。
最佳答案
尝试:
ko.mapping.fromJS(data, {}, notifyVM);
两个参数形式需要一个先前使用 ko.mapping.fromJS 创建的 View 模型。如果它没有找到(基于查找 fromJS 添加的特定属性),它会假设您正在调用 fromJS(data, options) 表单。
3 参数形式消除了这种歧义。
关于jquery - knockout 映射 JSON 更新现有 View 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17983440/