jquery - knockout 映射 JSON 更新现有 View 模型

标签 jquery knockout.js knockout-mapping-plugin

我有来自服务器的 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/

相关文章:

javascript - 使用 KnockoutJS,如何绑定(bind)到数组项的子属性

json - 使用 knockout.mapping 时,knockoutjs 抛出 "Unknown template value"

php - 使用ajax post实时验证用户名和电子邮件地址

javascript - 如何在浏览器上无延迟地显示 "No Results"

javascript - Highcharts 3D 饼图

javascript - Knockout - 将 CSS 类分配给 View 模型的输入

javascript - knockout 帮助获取外部数据

javascript - 使用 Javascript 检查广播流媒体 URL 是否正常工作

javascript - Knockout.js 的 cleanNode 不会解除事件绑定(bind)

javascript - 在 Knockout 中扩展动态和映射数据