我有一个可编辑的网格和一个向网格添加数据的表单。用户可以直接编辑网格数据,他可以使用表单部分输入新条目。我已经将 ASP.Net MVC 与 ajax 表单结合使用,效果很好。我在成功的 ajax 回发后更新了整个网格 html。没有什么复杂的,一个传统的实现。
现在,我一直在努力使用 knockoutjs 来增强它。这个想法是保留 UI,但在后端做所有事情,以便用户体验更好,闪烁最少,流量/回发时间更少。正如预期的那样,一切都在后端进行。以下是总结——
我有一个 viewModel,它由一个“commentToAdd”对象和一个“commentList”对象组成,正如预期的那样,它是一个评论对象列表。我将“commentList”对象与我的 Grid 绑定,“commentToAdd”与表单绑定。
var viewModel = new commentsModel();
$.getJSON('@Url.Action("CommentsKOVM", "Claim", new { ClaimGUID = commentObj.ClaimGUID })',
function(data) { //upon success
viewModel.commentToAdd = ko.mapping.fromJS(data.CommentToAdd);
viewModel.allComments = ko.mapping.fromJS(data.AllComments, mapping);// Initial items
ko.applyBindings(viewModel);
工作正常。但我有一个“日期”字段。JSON 将其呈现为 '/Date(1224043200000)' 所以,我必须对其进行格式化 -如何格式化 Microsoft JSON 日期?喜欢:
<span data-bind="text:new Date(parseInt(PostedOn.toString().substr(6))).toLocaleFormat('%d/%m/%Y')"></span>
但它不起作用,因为似乎 'PostedOn' 被转换为可观察的!.toString 返回一个函数定义!
我还尝试按照Hanselman 文章的解释实现日期绑定。
我似乎没有在网格中正确显示我的日期。我还尝试“忽略映射”:
var mapping = {'ignore': ["PostedOn"]};
但不知道如何使它适用于我的子对象(即commentList.PostedOn)。
我可能没有以正确的方式这样做,所以请建议或至少帮助我在我的网格中获得正确的日期。
PS:当我使用 ko.observableArray(data.commentList) 时按预期工作,但它不适合编辑功能。