我使用knockout.js与映射插件。 我得到了一些JSON数据,并使用映射插件,它映射到我的HTML。
在JSON数据是,我需要映射到使用映射插件的HTML JSON格式的日期。 是否有可能使用moment.js格式化日期,然后让映射插件将其映射到HTML? 如何获取json的日期,将其重新格式化为可读的日期,并将其映射到HTML?
// Here is my json formatted date
"DueDate":"\/Date(1362124800000)\/"
// Here's my data model
var viewModel;
$.getJSON('/myJsonData', function (data) {
viewModel = ko.mapping.fromJS(data);
ko.applyBindings(viewModel);
// moment.js format date from json - how can this be passed to the ko.mapping?
var mo = moment("\/Date(1362124800000)\/").format("MMM Do YY");
});
这里有一个备选答案,它利用自定义绑定 。 你在你查看这样使用它:
<span data-bind="textualDate: DueDate"></span>
自定义代码是这样的:
ko.bindingHandlers.textualDate = {
update: function(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
var valueUnwrapped = ko.utils.unwrapObservable(valueAccessor());
var textContent = moment(valueUnwrapped).format("MMM Do YY");
ko.bindingHandlers.text.update(element, function() { return textContent; });
}
};
这是方便,因为你可以使用这个绑定所有的观测日期,不只是DueDate
。 例如,假设您的模型被扩展为其他日期,你可以很容易地做到这一点,而无需修改您的视图模型:
<span data-bind="textualDate: StartDate"></span>
<span data-bind="textualDate: RevisedDate"></span>
<span data-bind="textualDate: DueDate"></span>
<span data-bind="textualDate: WeWillGetSuedPassedThisDueDate"></span>
你可以看看这个的jsfiddle了工作演示。
该mapping.fromJS
方法以一个映射选项在其第二个参数对象。
你可以提供一个有创造功能( 使用“创造”自定义对象建设的), DueDate
,你做的日期转换:
var data = {
"DueDate": "\/Date(1362124800000)\/"
}
var mappingOptions = {
DueDate: {
create: function (options) {
return moment(options.data).format("MMM Do YY");
}
}
};
viewModel = ko.mapping.fromJS(data, mappingOptions);
演示的jsfiddle。