我试图从数据库中拉回 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/