【发布时间】:2011-08-22 00:23:52
【问题描述】:
我在 asp.net mvc 页面上使用 knockoutjs。我正在使用 ajax 通过调用 ko.toJSON(viewModel) 将表单保存回服务器,然后使用 jQuery 将结果发布回服务器。视图模型上的所有属性都已成功序列化,除了 Javascript 日期作为空对象持久化。
声明:
var viewModel = {
startTime: ko.observable(),
type: ko.observable(),
durationInMinutes: ko.observable(),
notes: ko.observable()
};
保存数据:
var postData = ko.toJSON(viewModel);
$.ajax({
url: "/data",
type: "POST",
data: postData,
dataType: "json",
contentType: "application/json; charset=utf-8",
success: function () {
console.log('success!');
},
error: function () {
console.log('fail!');
}
});
viewModel.startTime()的console.log值为:
Date {Tue May 10 2011 11:30:00 GMT-0500 (Central Daylight Time)}
保存数据第1行后,postData的值为:
{
"startTime": {},
"type": "1",
"durationInMinutes": "45",
"notes": "asfasdfasdfasdfasdfasdfasdfas",
"displayableStartTime": "10-May 11:30"
}
如果我将 Save Data 的第 1 行扩展为
var jsonEvent = ko.toJS(viewModel);
jsonEvent.startTime = viewModel.startTime();
var postData = JSON.stringify(jsonEvent);
postData 的值为:
{
"startTime": "2011-05-10T16:30:00.000Z",
"type": "1",
"durationInMinutes": "45",
"notes": "asfasdfasdfasdfasdfasdfasdfas",
"displayableStartTime": "10-May 11:30"
}
谁能解释可能发生的事情以及我如何能够让 knockoutjs 处理日期对象?
【问题讨论】:
-
这里记录了一个问题:github.com/SteveSanderson/knockout/issues/55。您对上一个示例中的格式满意吗?
-
优秀。谢谢! Wrt格式,你是指完整的SaveData还是SaveData的第1行扩展?我是 jquery、ajax 和 knockoutjs 的新手,所以请随时传递您可能有的任何建议。第 1 行扩展基本上是出于无知的实现(让框架做它的事情,然后修复错误的值)。
-
是的,如果这是您想要的值,那么下面的答案将是另一种方法。祝你好运!
标签: ajax json knockout.js