Knockout.js,映射插件和moment.js - 格式化/映射JSON日期(Knockou

2019-09-01 18:58发布

我使用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");
});

Answer 1:

这里有一个备选答案,它利用自定义绑定 。 你在你查看这样使用它:

<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了工作演示。



Answer 2:

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。



文章来源: Knockout.js, mapping plugin and moment.js - formatting/mapping json dates