0

我希望我的实体中的所有日期类型始终转换为 momentjs。我用于此的解决方案(代码 2)适用于 getResources(代码 1),初始化程序为“事件”和“移位”实体触发。但是当我调用 getUser 时,expand 会正常工作,并且我得到了“Order”和“Event”的正确数据,但“Event”的初始化程序永远不会触发。任何想法为什么?是因为我正在使用属性路径扩展吗?

此外,如果您能想到一个更好的解决方案将我的实体中的所有 Date 类型转换为 momentjs,我也很乐意接受。

代码 1:

var getResources = function () {
    var query = breeze.EntityQuery
        .from("Resources")
        .expand("Event, Shift")
        .orderBy("ResourceId");

    return manager.executeQuery(query)
        .fail(fail);
    }

var getUser = function () {
    var query = breeze.EntityQuery
        .from("LoggedInUser")
        .expand("Order.Event")
        .orderBy("Email");

    return manager.executeQuery(query)
         .fail(fail);
}

代码 2:

function configureMetadataStore(metadataStore) {
    metadataStore.registerEntityTypeCtor('Shift', null, momentInitializer);
    metadataStore.registerEntityTypeCtor('Event', null, momentInitializer);
    metadataStore.registerEntityTypeCtor('Order', null, momentInitializer);            
}

function momentInitializer(entity) {
    var newMoment,
        prop;

    for (prop in entity) {
        if (ko.isObservable(entity[prop])) {
            if (entity[prop]() instanceof Date) {
                newMoment = ko.observable(moment(entity[prop]()));
                entity[prop] = newMoment;
            }
        }
    }            
}
4

1 回答 1

0

我相信对此有更好和更详细的答案,但据我了解,您可能正在尝试以给定格式显示日期,而不是实际在数据库中转换它,对吗?

如果您使用的是诸如 Knockout.js 之类的绑定处理程序,您可以只更改它的显示格式,而不是转换日期/时间戳。我总是谨慎地转换日期以显示它们,因为过去我遇到过数据库因为这样的事情而对我生气的问题。

这是一个自定义绑定处理程序的示例,将日期时间显示为 2013 年 5 月 29 日下午 2:22:00

ko.bindingHandlers.DateTime = {
    update: function (element, valueAccessor) {
        var value = valueAccessor();
        var date = moment(value());
        var strDate = date.format('MMMM Do YYYY, h:mm:ss a');
        $(element).text(strDate);
    }
};
于 2013-05-29T19:22:07.223 回答