javascript - 如何使用 Breeze.js 设置 DateTimes 的自定义绑定(bind)?

标签 javascript datetime knockout.js breeze momentjs

我试图从数据库中拉回 DateTime 对象(使用 Breeze ),然后尝试将格式化日期显示为绑定(bind),以便可以编辑它并将其保存回数据库。问题是,约会的某个地方失去了他们的“实体性”。我尝试过使用自定义绑定(bind)和来自此网站和其他网站的计算可观察示例,以尝试维护我所有的日期“实体性”,但似乎没有任何效果,我可以格式化日期或保存它。

这是我尝试使用的自定义绑定(bind)片段的示例:

    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/时刻显示格式化日期,然后保存对此格式化日期所做的任何更改?

提前致谢,

洛兹

最佳答案

您不必使用 knockout 自定义绑定(bind); Breeze 和 moment 一起可以通过将订单表扩展到您想要的任何内容来为您完成这项工作。

您会在问题中添加一些有用的细节..但我认为想法是相同的。尽管如此,我还是以订单表为例。

假设您想以 "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();

现在回答你的问题可能已经太晚了,但我认为这可能会有所帮助

关于javascript - 如何使用 Breeze.js 设置 DateTimes 的自定义绑定(bind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21457893/

相关文章:

r - 在 R 中绘制时间序列(24 小时)

php - 在 PHP 中减去时间

autocomplete - Knockout.js 文本框值绑定(bind)自动完成

json - System.Web.Script.Serialization.JavaScriptSerializer().Serialize 是否执行 Json.Encode 不执行的操作?

javascript - 来自数组的选择器 - Jquery/Javascript

javascript - 如何使用箭头键 move 图像javascript

javascript - 将时间输入设置为数据库中的日期时间

javascript - 在 knockout 控制流模板中使用基于字符串的变量

javascript - 如何在具有相同选项的其他选择中禁用、隐藏或删除所选选项?

javascript - 我需要帮助来尝试获取多维数组的总和