如何使用breeze.js为DateTimes设置自定义绑定?

时间:2014-01-30 13:29:58

标签: javascript datetime knockout.js breeze momentjs

我正在尝试从数据库中取回DateTime对象(使用breeze),然后尝试将格式化日期显示为绑定,以便可以编辑它并将其保存回数据库。问题是在某个地方,日期失去了他们的“实体”。我已尝试使用自定义绑定和计算此站点和其他人的可观察示例,尝试维护我的所有日​​期“实体”,但似乎没有什么工作,我可以格式化日期或保存它。

以下是我尝试使用的自定义绑定代码段的示例:

    ko.bindingHandlers.datetimevalue = {
        init: function (element, valueAccessor, allBindingsAccessor) {
            // Use the value binding
            ko.bindingHandlers.value.init(element, valueAccessor, allBindingsAccessor);

            // Provide a custom text value
            var value = valueAccessor(), allBindings = allBindingsAccessor();
            var dateFormat = "DD/MM/YYYY h:mm a";
            var strDate = ko.utils.unwrapObservable(value);
            if (strDate) {
                var date = moment(strDate).format(dateFormat);
                $(element).val(date);
            }
            else {
                var date = moment(new Date()).format(dateFormat);
                $(element).val(date);
            }
        },
        update: function (element, valueAccessor, allBindingsAccessor) {
            // Use the value binding
            ko.bindingHandlers.value.update(element, valueAccessor, allBindingsAccessor);

            // Provide a custom text value
            var value = valueAccessor(), allBindings = allBindingsAccessor();
            var dateFormat = "DD/MM/YYYY h:mm a";
            var strDate = ko.utils.unwrapObservable(value);
            if (strDate) {
                var date = moment(strDate).format(dateFormat);
                $(element).val(date);
            }
        }
    };

在此示例中(取自this link),日期以指定格式显示,但不会持久保存回服务器。如何使用breeze / moment显示格式化日期,然后保存对此格式化日期所做的任何更改?

提前致谢,

Lowz

1 个答案:

答案 0 :(得分:2)

您不必使用淘汰赛自定义绑定;微风和时刻在一起可以通过将订单表扩展到您想要的任何内容来为您完成工作。

你会在你的问题中提出一些有用的细节......但我认为这个想法是一样的。不过,我将以订单表为例。

假设您要以"DD/MM/YYYY h:mm a"

格式向客户显示订单日期
var manager = new breeze.EntityManager(remoteServiceName); // remoteServiceName is a string representing your controller path
 var Order = function() {
    this.formattedOrderDate = ko.computed(function () {
    var dt = this.orderDate();
    var value = (dt && moment.utc(dt).isValid()) ?
    moment.utc(dt).format('DD/MM/YYYY h:mm a') : '[Unknown]';
    return value;
    });
    }
manager.metadataStore.registerEntityTypeCtor('Orders',Order);

这将以所需格式显示日期。 要进行更新:在调用saveChanges()之前将orderDate()属性设置为计算值:

order.setProperty("orderDate", new Date(order.formattedOrderDate()));
// Then....

manager.saveChanges();

这可能为时已晚,无法回答您的问题,但我认为这可能会有所帮助