use*_*689 5 jquery knockout-mapping-plugin knockout.js
我有来自服务器的这个JSON数据:
{"HaveNotification":false,"IsError":false,"Title":null,"Description":null}
Run Code Online (Sandbox Code Playgroud)
并尝试通过ko.mapping填充此视图模型:
var notifyVM = {
HaveNotification: ko.observable(true),
IsError: ko.observable(false),
Title: ko.observable('Title goes here'),
Description: ko.observable('Description goes here'),
}
Run Code Online (Sandbox Code Playgroud)
使用此代码,在轮询间隔调用该代码:
function pollNotifications() {
$.getJSON('@Url.Action("GetNotifications", "Home")', function (data) {
ko.mapping.fromJSON(data, notifyVM);
setTimeout(pollNotifications, 10000);
});
}
Run Code Online (Sandbox Code Playgroud)
这是页面加载代码:
$(function () {
ko.applyBindings(notifyVM);
setTimeout(pollNotifications, 10000);
});
Run Code Online (Sandbox Code Playgroud)
但它不起作用.如果我在fromJSON调用之后检查视图模型,则不会更新observable,它们仍处于初始值.
更新:更多信息......如果我在pollNotifications函数中执行此操作
var newVM = ko.mapping.fromJSON(data);
Run Code Online (Sandbox Code Playgroud)
我注意到它创建的视图模型与我的视图模型不同,它由一个可观察的函数组成,而我的是一个具有一组可观察属性的对象.
小智 9
尝试:
ko.mapping.fromJS(data, {}, notifyVM);Run Code Online (Sandbox Code Playgroud)
两个参数形式需要一个先前使用ko.mapping.fromJS创建的视图模型.如果找不到(基于查找来自JS添加的特定属性),它假定您正在调用fromJS(数据,选项)表单.
3参数形式消除了这种歧义.
Kar*_*son -1
您是否尝试过手动将值映射到视图模型并查看是否有效,就像这样?
function pollNotifications() {
$.getJSON('@Url.Action("GetNotifications", "Home")', function (data) {
notifyVM.HaveNotification(data.HaveNotification);
notifyVM.IsError(data.IsError);
notifyVM.Title(data.Title);
notifyVM.Description(data.Description);
setTimeout(pollNotifications, 10000);
});
}
Run Code Online (Sandbox Code Playgroud)
如果上述方法不起作用,那么您就知道这是您的数据的问题;否则映射不会正确发生ko.mapping.fromJSON()。
| 归档时间: |
|
| 查看次数: |
2664 次 |
| 最近记录: |